home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2001 May / SGI IRIX Base Documentation 2001 May.iso / usr / share / catman / p_man / cat5 / UIL.z / UIL
Encoding:
Text File  |  2001-04-17  |  126.0 KB  |  2,443 lines

  1.  
  2.  
  3.  
  4.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  5.  
  6.  
  7.  
  8.      NNNNAAAAMMMMEEEE
  9.           _U_I_L - The user interface language file format
  10.  
  11.      SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.           MODULE _m_o_d_u_l_e__n_a_m_e[ NAMES = CASE_INSENSITIVE | CASE_SENSITIVE ]
  13.           [ CHARACTER_SET = character_set ]
  14.           [ OBJECTS = { _w_i_d_g_e_t__n_a_m_e = GADGET | WIDGET; [...] } ]
  15.           { [
  16.           [ _v_a_l_u_e__s_e_c_t_i_o_n ] |
  17.           [ _p_r_o_c_e_d_u_r_e__s_e_c_t_i_o_n ] |
  18.           [ _l_i_s_t__s_e_c_t_i_o_n ] |
  19.           [ _o_b_j_e_c_t__s_e_c_t_i_o_n ] |
  20.           [ _i_d_e_n_t_i_f_i_e_r__s_e_c_t_i_o_n ]
  21.           [ ... ]
  22.           ] }
  23.           END MODULE;
  24.  
  25.      VVVVEEEERRRRSSSSIIIIOOOONNNN
  26.           This page documents Motif 2.1.
  27.  
  28.      DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  29.           The UIL language is used for describing the initial state of
  30.           a user interface for a widget based application. UIL
  31.           describes the widgets used in the interface, the resources
  32.           of those widgets, and the callbacks of those widgets. The
  33.           UIL file is compiled into a UID file using the command uuuuiiiillll
  34.           or by the callable compiler UUUUiiiillll(((()))). The contents of the
  35.           compiled UID file can then be accessed by the various Motif
  36.           Resource Management (MRM) functions from within an
  37.           application program.
  38.  
  39.           The UID file is independent of the platform on which the
  40.           Motif program will eventually be run. In other words, the
  41.           same UID file can be used on any system that can run Motif.
  42.  
  43.         FFFFiiiilllleeee
  44.           A UIL file consists of a single complete module, described
  45.           in the syntax description above, or, if the file is to be
  46.           included in a larger UIL file, one complete "section," as
  47.           described below. UIL uses five different kinds of sections:
  48.           value, procedure, list, object, and identifier.
  49.  
  50.           UIL is a free-form language. This means that high-level
  51.           constructs such as object and value declarations do not need
  52.           to begin in any particular column and can span any number of
  53.           lines. Low-level constructs such as keywords and punctuation
  54.           characters can also begin in any column; however, except for
  55.           string literals and comments, they cannot span lines.
  56.  
  57.           The UIL compiler accepts input lines up to 132 characters in
  58.           length.
  59.  
  60.  
  61.  
  62.  
  63.      Page 1                                           (printed 4/6/01)
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  71.  
  72.  
  73.  
  74.           _M_O_D_U_L_E _m_o_d_u_l_e__n_a_m_e
  75.                     The name by which the UIL module is known in the
  76.                     UID file.  This name is stored in the UID file for
  77.                     later use in the retrieval of resources by the
  78.                     MRM.  This name is always stored in uppercase in
  79.                     the UID file.
  80.  
  81.           _N_A_M_E_S ==== _C_A_S_E__I_N_S_E_N_S_I_T_I_V_E | _C_A_S_E__S_E_N_S_I_T_I_V_E
  82.  
  83.                     Indicates whether names should be treated as case
  84.                     sensitive or case insensitive. The default is case
  85.                     sensitive.  The case-sensitivity clause should be
  86.                     the first clause in the module header, and in any
  87.                     case must precede any statement that contains a
  88.                     name.  If names are case sensitive in a UIL
  89.                     module, UIL keywords in that module must be in
  90.                     lowercase. Each name is stored in the UIL file in
  91.                     the same case as it appears in the UIL module.  If
  92.                     names are case insensitive, then keywords can be
  93.                     in uppercase, lowercase, or mixed case, and the
  94.                     uppercase equivalent of each name is stored in the
  95.                     UID file.
  96.  
  97.           _C_H_A_R_A_C_T_E_R__S_E_T ==== cccchhhhaaaarrrraaaacccctttteeeerrrr____sssseeeetttt
  98.  
  99.                     Specifies the default character set for string
  100.                     literals in the module that do not explicitly set
  101.                     their character set.  The default character set,
  102.                     in the absence of this clause is the codeset
  103.                     component of the _L_A_N_G environment variable, or the
  104.                     value of XXXXmmmmFFFFAAAALLLLLLLLBBBBAAAACCCCKKKK____CCCCHHHHAAAARRRRSSSSEEEETTTT if _L_A_N_Gis not set or
  105.                     has no codeset component.  The value of
  106.                     XXXXmmmmFFFFAAAALLLLLLLLBBBBAAAACCCCKKKK____CCCCHHHHAAAARRRRSSSSEEEETTTT is defined by the UIL supplier,
  107.                     but is usually ISO8859-1 (equivalent to
  108.                     ISO_LATIN1).  Use of this clause turns off all
  109.                     localized string literal processing turned on by
  110.                     the compiler flag ----ssss or the UUUUiiiillll____ccccoooommmmmmmmaaaannnndddd____ttttyyyyppppeeeedata
  111.                     structure element uuuusssseeee____sssseeeettttllllooooccccaaaalllleeee____ffffllllaaaagggg.
  112.  
  113.           OOOOBBBBJJJJEEEECCCCTTTTSSSS ==== {{{{ _w_i_d_g_e_t__n_a_m_e = _G_A_D_G_E_T | WWWWIIIIDDDDGGGGEEEETTTT;;;; }}}}
  114.  
  115.                     Indicates whether the widget or gadget form of the
  116.                     control specified by _w_i_d_g_e_t__n_a_m_e is used by
  117.                     default.  By default the widget form is used, so
  118.                     the gadget keyword is usually the only one used.
  119.                     The specified control should be one that has both
  120.                     a widget and gadget version: XmCascadeButton,
  121.                     XmLabel, XmPushButton, XmSeparator, and
  122.                     XmToggleButton.  The form of more than one control
  123.                     can be specified by delimiting them with
  124.                     semicolons.  The gadget or widget form of an
  125.                     instance of a control can be specified with the
  126.  
  127.  
  128.  
  129.      Page 2                                           (printed 4/6/01)
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  137.  
  138.  
  139.  
  140.                     _G_A_D_G_E_T and _W_I_D_G_E_T keywords in a particular object
  141.                     declaration.
  142.  
  143.           _v_a_l_u_e__s_e_c_t_i_o_n
  144.                     Provides a way to name a value expression or
  145.                     literal.  The value name can then be referred to
  146.                     by declarations that occur elsewhere in the UIL
  147.                     module in any context where a value can be used.
  148.                     Values can be forward referenced.  Value sections
  149.                     are described in more detail later in the
  150.                     reference page.
  151.  
  152.           _p_r_o_c_e_d_u_r_e__s_e_c_t_i_o_n
  153.                     Defines the callback routines used by a widget and
  154.                     the creation routines for user-defined widgets.
  155.                     These definitions are used for error checking.
  156.                     Procedure sections are described in more detail
  157.                     later in the reference page.
  158.  
  159.           _l_i_s_t__s_e_c_t_i_o_n
  160.                     Provides a way to group together a set of
  161.                     arguments, controls (children), callbacks, or
  162.                     procedures for later use in the UIL module.  Lists
  163.                     can contain other lists, so that you can set up a
  164.                     hierarchy to clearly show which arguments,
  165.                     controls, callbacks, and procedures are common to
  166.                     which widgets.  List sections are described in
  167.                     more detail later in the reference page.
  168.  
  169.           _o_b_j_e_c_t__s_e_c_t_i_o_n
  170.                     Defines the objects that make up the user
  171.                     interface of the application.  You can reference
  172.                     the object names in declarations that occur
  173.                     elsewhere in the UIL module in any context where
  174.                     an object name can be used (for example, in a
  175.                     controls list, as a symbolic reference to a widget
  176.                     ID, or as the _t_a_g__v_a_l_u_e argument for a callback
  177.                     procedure).  Objects can be forward referenced.
  178.                     Object sections are described in more detail later
  179.                     in the reference page.
  180.  
  181.           _i_d_e_n_t_i_f_i_e_r__s_e_c_t_i_o_n
  182.                     Defines a run-time binding of data to names that
  183.                     appear in the UIL module.  Identifier sections are
  184.                     described in more detail later in the reference
  185.                     page.
  186.  
  187.           The UIL file can also contain comments and include
  188.           directives, which are described along with the main elements
  189.           of the UIL file format in the following sections.
  190.  
  191.         CCCCoooommmmmmmmeeeennnnttttssss
  192.  
  193.  
  194.  
  195.      PPPPaaaaggggeeee 3333                                           ((((pppprrrriiiinnnntttteeeedddd 4444////6666////00001111))))
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  203.  
  204.  
  205.  
  206.           Comments can take one of two forms, as follows:
  207.  
  208.              +o  The comment is introduced with the sequence ////****followed
  209.                 by the text of the comment and terminated with the
  210.                 sequence ****////.  This form of comment can span multiple
  211.                 source lines.
  212.  
  213.              +o  The comment is introduced with an ! (exclamation
  214.                 point), followed by the text of the comment and
  215.                 terminated by the end of the source line.
  216.  
  217.           Neither form of comment can be nested.
  218.  
  219.         VVVVaaaalllluuuueeee sssseeeeccccttttiiiioooonnnnssss
  220.           A value section consists of the keyword _V_A_L_U_E followed by a
  221.           sequence of value declarations. It has the following syntax:
  222.  
  223.           _V_A_L_U_E _v_a_l_u_e__n_a_m_e ::::[ _E_X_P_O_R_T_E_D | _P_R_I_V_A_T_E ] _v_a_l_u_e__e_x_p_r_e_s_s_i_o_n |
  224.           _I_M_P_O_R_T_E_D _v_a_l_u_e__t_y_p_e ;;;;
  225.  
  226.           Where _v_a_l_u_e__e_x_p_r_e_s_s_i_o_n is assigned to _v_a_l_u_e__n_a_m_e or a
  227.           _v_a_l_u_e__t_y_p_e is assigned to an imported value name.  A value
  228.           declaration provides a way to name a value expression or
  229.           literal.  The value name can be referred to by declarations
  230.           that occur later in the UIL module in any context where a
  231.           value can be used.  Values can be forward referenced.
  232.  
  233.           _E_X_P_O_R_T_E_D  A value that you define as exported is stored in
  234.                     the UID file as a named resource, and therefore
  235.                     can be referenced by name in other UID files. When
  236.                     you define a value as exported, MRM looks outside
  237.                     the module in which the exported value is declared
  238.                     to get its value at run time.
  239.  
  240.           _P_R_I_V_A_T_E   A private value is a value that is not imported or
  241.                     exported.  A value that you define as private is
  242.                     not stored as a distinct resource in the UID file.
  243.                     You can reference a private value only in the UIL
  244.                     module containing the value declaration. The value
  245.                     or object is directly incorporated into anything
  246.                     in the UIL module that references the declaration.
  247.  
  248.           _I_M_P_O_R_T_E_D  A value that you define as imported is one that is
  249.                     defined as a named resource in a UID file. MRM
  250.                     resolves this declaration with the corresponding
  251.                     exported declaration at application run time.
  252.  
  253.           By default, values and objects are private.  The following
  254.           is a list of the supported value types in UIL:
  255.  
  256.              +o  _A_N_Y
  257.  
  258.  
  259.  
  260.  
  261.      Page 4                                           (printed 4/6/01)
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  269.  
  270.  
  271.  
  272.              +o  _A_R_G_U_M_E_N_T
  273.  
  274.              +o  _B_O_O_L_E_A_N
  275.  
  276.              +o  _C_O_L_O_R
  277.  
  278.              +o  _C_O_L_O_R__T_A_B_L_E
  279.  
  280.              +o  _C_O_M_P_O_U_N_D__S_T_R_I_N_G
  281.  
  282.              +o  _F_L_O_A_T
  283.  
  284.              +o  _F_O_N_T
  285.  
  286.              +o  _F_O_N_T__T_A_B_L_E
  287.  
  288.              +o  _F_O_N_T_S_E_T
  289.  
  290.              +o  _I_C_O_N
  291.  
  292.              +o  _I_N_T_E_G_E_R
  293.  
  294.              +o  _I_N_T_E_G_E_R__T_A_B_L_E
  295.  
  296.              +o  _K_E_Y_S_Y_M
  297.  
  298.              +o  _R_E_A_S_O_N
  299.  
  300.              +o  _S_I_N_G_L_E__F_L_O_A_T
  301.  
  302.              +o  _S_T_R_I_N_G
  303.  
  304.              +o  _S_T_R_I_N_G__T_A_B_L_E
  305.  
  306.              +o  _T_R_A_N_S_L_A_T_I_O_N__T_A_B_L_E
  307.  
  308.              +o  _W_I_D_E__C_H_A_R_A_C_T_E_R
  309.  
  310.              +o  _W_I_D_G_E_T
  311.  
  312.         PPPPrrrroooocccceeeedddduuuurrrreeee sssseeeeccccttttiiiioooonnnnssss
  313.           A procedure section consists of the keyword _P_R_O_C_E_D_U_R_E
  314.           followed by a sequence of procedure declarations. It has the
  315.           following syntax:
  316.  
  317.           PROCEDURE
  318.                _p_r_o_c_e_d_u_r_e__n_a_m_e [ ( [ _v_a_l_u_e__t_y_p_e ]) ];
  319.  
  320.           Use a procedure declaration to declare
  321.  
  322.              +o  A routine that can be used as a callback routine for a
  323.                 widget
  324.  
  325.  
  326.  
  327.      Page 5                                           (printed 4/6/01)
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  335.  
  336.  
  337.  
  338.              +o  The creation function for a user-defined widget
  339.  
  340.           You can reference a procedure name in declarations that
  341.           occur later in the UIL module in any context where a
  342.           procedure can be used. Procedures can be forward referenced.
  343.           You cannot use a name you used in another context as a
  344.           procedure name.
  345.  
  346.           In a procedure declaration, you have the option of
  347.           specifying that a parameter will be passed to the
  348.           corresponding callback routine at run time. This parameter
  349.           is called the callback tag. You can specify the data type of
  350.           the callback tag by putting the data type in parentheses
  351.           following the procedure name. When you compile the module,
  352.           the UIL compiler checks that the argument you specify in
  353.           references to the procedure is of this type. Note that the
  354.           data type of the callback tag must be one of the valid UIL
  355.           data types.  You can use a widget as a callback tag, as long
  356.           as the widget is defined in the same widget hierarchy as the
  357.           callback, that is they have a common ancestor that is in the
  358.           same UIL hierarchy.
  359.  
  360.           The following list summarizes how the UIL compiler checks
  361.           argument type and argument count, depending on the procedure
  362.           declaration.
  363.  
  364.           No parameters
  365.                     No argument type or argument count checking
  366.                     occurs.  You can supply either 0 or one arguments
  367.                     in the procedure reference.
  368.  
  369.           (((( ))))       Checks that the argument count is 0 (zero).
  370.  
  371.           ((((AAAANNNNYYYY))))     Checks that the argument count is 1. Does not
  372.                     check the argument type. Use the _A_N_Y type to
  373.                     prevent type checking on procedure tags.
  374.  
  375.           ((((_t_y_p_e))))    Checks for one argument of the specified type.
  376.  
  377.           ((((ccccllllaaaassssssss____nnnnaaaammmmeeee))))
  378.                     Checks for one widget argument of the specified
  379.                     widget class.
  380.  
  381.           While it is possible to use any UIL data type to specify the
  382.           type of a tag in a procedure declaration, you must be able
  383.           to represent that data type in the programming language you
  384.           are using. Some data types (such as integer, Boolean, and
  385.           string) are common data types recognized by most programming
  386.           languages.  Other UIL data types (such as string tables) are
  387.           more complicated and may require that you set up an
  388.           appropriate corresponding data structure in the application
  389.           in order to pass a tag of that type to a callback routine.
  390.  
  391.  
  392.  
  393.      Page 6                                           (printed 4/6/01)
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  401.  
  402.  
  403.  
  404.           You can also use a procedure declaration to specify the
  405.           creation function for a user-defined widget. In this case,
  406.           you specify no formal parameters.  The procedure is invoked
  407.           with the standard three arguments passed to all widget
  408.           creation functions.  (See the Motif Toolkit documentation
  409.           for more information about widget creation functions.)
  410.  
  411.         LLLLiiiisssstttt sssseeeeccccttttiiiioooonnnnssss
  412.           A list section consists of the keyword _L_I_S_T followed by a
  413.           sequence of list declarations. It has the following syntax:
  414.  
  415.           LIST
  416.                _l_i_s_t__n_a_m_e: { list_item; [...] }
  417.                [...]
  418.  
  419.           You can also use list sections to group together a set of
  420.           arguments, controls (children), callbacks, or procedures for
  421.           later use in the UIL module. Lists can contain other lists,
  422.           so that you can set up a hierarchy to clearly show which
  423.           arguments, controls, callbacks, and procedures are common to
  424.           which widgets.  You cannot mix the different types of lists;
  425.           a list of a particular type cannot contain entries of a
  426.           different list type or reference the name of a different
  427.           list type.  A list name is always private to the UIL module
  428.           in which you declare the list and cannot be stored as a
  429.           named resource in a UID file.
  430.  
  431.           The additional list types are described in the following
  432.           sections.
  433.  
  434.           AAAArrrrgggguuuummmmeeeennnnttttssss LLLLiiiisssstttt SSSSttttrrrruuuuccccttttuuuurrrreeee
  435.  
  436.           An arguments list defines which arguments are to be
  437.           specified in the arguments list parameter when the creation
  438.           routine for a particular object is called at run time.  An
  439.           arguments list also specifies the values for those
  440.           arguments.  Argument lists have the following syntax:
  441.  
  442.           LIST
  443.                _l_i_s_t__n_a_m_e: ARGUMENTS {
  444.                     _a_r_g_u_m_e_n_t__n_a_m_e = _v_a_l_u_e__e_x_p_r_e_s_s_i_o_n;
  445.                     [...] }
  446.           [...]
  447.  
  448.           The argument name must be either a built-in argument name or
  449.           a user-defined argument name that is specified with the
  450.           _A_R_G_U_M_E_N_T function.
  451.  
  452.           If you use a built-in argument name as an arguments list
  453.           entry in an object definition, the UIL compiler checks the
  454.           argument name to be sure that it is supported by the type of
  455.           object that you are defining. If the same argument name
  456.  
  457.  
  458.  
  459.      Page 7                                           (printed 4/6/01)
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  467.  
  468.  
  469.  
  470.           appears more than once in a given arguments list, the last
  471.           entry that uses that argument name supersedes all previous
  472.           entries with that name, and the compiler issues a message.
  473.  
  474.           Some arguments, such as XXXXmmmmNNNNiiiitttteeeemmmmssss and XXXXmmmmNNNNiiiitttteeeemmmmCCCCoooouuuunnnntttt, are
  475.           coupled by the UIL compiler.  When you specify one of the
  476.           arguments, the compiler also sets the other. The coupled
  477.           argument is not available to you.
  478.  
  479.           The Motif Toolkit and the X Toolkit (intrinsics) support
  480.           constraint arguments.  A constraint argument is one that is
  481.           passed to children of an object, beyond those arguments
  482.           normally available.  For example, the Form widget grants a
  483.           set of constraint arguments to its children.  These
  484.           arguments control the position of the children within the
  485.           Form.
  486.  
  487.           Unlike the arguments used to define the attributes of a
  488.           particular widget, constraint arguments are used exclusively
  489.           to define additional attributes of the children of a
  490.           particular widget.  These attributes affect the behavior of
  491.           the children within their parent.  To supply constraint
  492.           arguments to the children, you include the arguments in the
  493.           arguments list for the child.
  494.  
  495.           See AAAAppppppppeeeennnnddddiiiixxxx BBBBfor information about which arguments are
  496.           supported by which widgets. See AAAAppppppppeeeennnnddddiiiixxxx CCCCfor information
  497.           about what the valid value type is for each built-in
  498.           argument.
  499.  
  500.           CCCCaaaallllllllbbbbaaaacccckkkkssss LLLLiiiisssstttt SSSSttttrrrruuuuccccttttuuuurrrreeee
  501.  
  502.           Use a callbacks list to define which callback reasons are to
  503.           be processed by a particular widget at run time.  Callback
  504.           lists have the following syntax:
  505.  
  506.           _L_I_S_T_l_i_s_t__n_a_m_e :::: CCCCAAAALLLLLLLLBBBBAAAACCCCKKKKSSSS {{{{_r_e_a_s_o_n__n_a_m_e ==== PPPPRRRROOOOCCCCEEEEDDDDUUUURRRREEEE
  507.           _p_r_o_c_e_d_u_r_e__n_a_m_e [[[[ (((( [ _v_a_l_u_e__e_x_p_r_e_s_s_i_o_n ] )))) ];;;; | _r_e_a_s_o_n__n_a_m_e ====
  508.           _p_r_o_c_e_d_u_r_e__l_i_s_t ;;;;[...] }}}}[...]
  509.  
  510.           For Motif Toolkit widgets, the reason name must be a built-
  511.           in reason name. For a user-defined widget, you can use a
  512.           reason name that you previously specified using the _R_E_A_S_O_N
  513.           function.  If you use a built-in reason in an object
  514.           definition, the UIL compiler ensures that reason is
  515.           supported by the type of object you are defining. Appendix B
  516.           shows which reasons each object supports.
  517.  
  518.           If the same reason appears more than once in a callbacks
  519.           list, the last entry referring to that name supersedes all
  520.           previous entries using the same reason, and the UIL compiler
  521.           issues a diagnostic message.
  522.  
  523.  
  524.  
  525.      Page 8                                           (printed 4/6/01)
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  533.  
  534.  
  535.  
  536.           If you specify a named value for the procedure argument
  537.           (callback tag), the data type of the value must match the
  538.           type specified for the callback tag in the corresponding
  539.           procedure declaration.  When specifying a widget name as a
  540.           procedure value expression you must also specify the type of
  541.           the widget and a space before the name of the widget.
  542.  
  543.           Because the UIL compiler produces a UID file rather than an
  544.           object module (.o), the binding of the UIL name to the
  545.           address of the entry point to the procedure is not done by
  546.           the loader, but is established at run time with the MRM
  547.           function MMMMrrrrmmmmRRRReeeeggggiiiisssstttteeeerrrrNNNNaaaammmmeeeessss.  You call this function before
  548.           fetching any objects, giving it both the UIL names and the
  549.           procedure addresses of each callback. The name you register
  550.           with MRM in the application program must match the name you
  551.           specified for the procedure in the UIL module.
  552.  
  553.           Each callback procedure receives three arguments. The first
  554.           two arguments have the same form for each callback. The form
  555.           of the third argument varies from object to object.
  556.  
  557.           The first argument is the address of the data structure
  558.           maintained by the Motif Toolkit for this object instance.
  559.           This address is called the widget ID for this object.
  560.  
  561.           The second argument is the address of the value you
  562.           specified in the callbacks list for this procedure. If you
  563.           do not specify an argument, the address is NULL.  Note that,
  564.           in the case where the value you specified is a string or an
  565.           XXXXmmmmSSSSttttrrrriiiinnnngggg, the value specified in the callbacks list already
  566.           represents an address rather than an actual value. In the
  567.           case of a simple string, for example, the value is the
  568.           address of the first character of that string. In these
  569.           cases, UIL does not add a level of indirection, and the
  570.           second argument to the callback procedure is simply the
  571.           value as specified in the callbacks list.
  572.  
  573.           The third argument is the reason name you specified in the
  574.           callbacks list.
  575.  
  576.           CCCCoooonnnnttttrrrroooollllssss LLLLiiiisssstttt SSSSttttrrrruuuuccccttttuuuurrrreeee
  577.  
  578.           A controls list defines which objects are children of, or
  579.           controlled by, a particular object.  Each entry in a
  580.           controls list has the following syntax:
  581.  
  582.           LIST
  583.                _l_i_s_t__n_a_m_e: CONTROLS {
  584.                     [_c_h_i_l_d__n_a_m_e: ] [MANAGED | UNMANAGED] _o_b_j_e_c_t__d_e_f_i_n_i_t_i_o_n;
  585.                     [...] }
  586.                [...]
  587.  
  588.  
  589.  
  590.  
  591.      Page 9                                           (printed 4/6/01)
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  599.  
  600.  
  601.  
  602.           If you specify the keyword _M_A_N_A_G_E_D at run time, the object
  603.           is created and managed; if you specify _U_N_M_A_N_A_G_E_D at run
  604.           time, the object is only created.  Objects are managed by
  605.           default.
  606.  
  607.           You can use _c_h_i_l_d__n_a_m_e to specify resources for the
  608.           automatically created children of a particular control.
  609.           Names for automatically created children are formed by
  610.           appending XXXXmmmm____ to the name of the child widget.  This name is
  611.           specified in the documentation for the parent widget.
  612.  
  613.           Unlike the arguments list and the callbacks list, a controls
  614.           list entry that is identical to a previous entry does not
  615.           supersede the previous entry. At run time, each controls
  616.           list entry causes a child to be created when the parent is
  617.           created. If the same object definition is used for multiple
  618.           children, multiple instances of the child are created at run
  619.           time.  See AAAAppppppppeeeennnnddddiiiixxxx BBBBfor a list of which widget types can be
  620.           controlled by which other widget types.
  621.  
  622.           PPPPrrrroooocccceeeedddduuuurrrreeeessss LLLLiiiisssstttt SSSSttttrrrruuuuccccttttuuuurrrreeee
  623.  
  624.           You can specify multiple procedures for a callback reason in
  625.           UIL by defining a procedures list. Just as with other list
  626.           types, procedures lists can be defined in-line or in a list
  627.           section and referenced by name.
  628.  
  629.           If you define a reason more than once (for example, when the
  630.           reason is defined both in a referenced procedures list and
  631.           in the callbacks list for the object), previous definitions
  632.           are overridden by the latest definition.  The syntax for a
  633.           procedures list is as follows:
  634.  
  635.           LIST
  636.                _l_i_s_t__n_a_m_e: PROCEDURES {
  637.                     _p_r_o_c_e_d_u_r_e__n_a_m_e [ ( [ _v_a_l_u_e__e_x_p_r_e_s_s_i_o_n ]) ];
  638.                     [...] }
  639.                [...]
  640.  
  641.           When specifying a widget name as a procedure value
  642.           expression you must also specify the type of the widget and
  643.           a space before the name of the widget.
  644.  
  645.         OOOObbbbjjjjeeeecccctttt SSSSeeeeccccttttiiiioooonnnnssss
  646.           An object section consists of the keyword _O_B_J_E_C_T followed by
  647.           a sequence of object declarations. It has the following
  648.           syntax:
  649.  
  650.           OBJECT _o_b_j_e_c_t__n_a_m_e:
  651.                [ EXPORTED | PRIVATE | IMPORTED ] _o_b_j_e_c_t__t_y_p_e          [ PROCEDURE _c_r_e_a_t_i_o_n__f_u_n_c_t_i_o_n ]
  652.                     [ _o_b_j_e_c_t__n_a_m_e [ WIDGET | GADGET ] | {_l_i_s_t__d_e_f_i_n_i_t_i_o_n_s } ]
  653.  
  654.  
  655.  
  656.  
  657.      Page 10                                          (printed 4/6/01)
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  665.  
  666.  
  667.  
  668.           Use an object declaration to define the objects that are to
  669.           be stored in the UID file. You can reference the object name
  670.           in declarations that occur elsewhere in the UIL module in
  671.           any context where an object name can be used (for example,
  672.           in a controls list, as a symbolic reference to a widget ID,
  673.           or as the _t_a_g__v_a_l_u_e argument for a callback procedure).
  674.           Objects can be forward referenced; that is, you can declare
  675.           an object name after you reference it. All references to an
  676.           object name must be consistent with the type of the object,
  677.           as specified in the object declaration.  You can specify an
  678.           object as exported, imported, or private.
  679.  
  680.           The object definition can contain a sequence of lists that
  681.           define the arguments, hierarchy, and callbacks for the
  682.           widget.  You can specify only one list of each type for an
  683.           object.  When you declare a user-defined widget, you must
  684.           include a reference to the widget creation function for the
  685.           user-defined widget.
  686.  
  687.           Note: Several widgets in the Motif Toolkit actually consist
  688.           of two linked widgets. For example, _X_m_S_c_r_o_l_l_e_d_T_e_x_t and
  689.           _X_m_S_c_r_o_l_l_e_d_L_i_s_t each consist of children XXXXmmmmTTTTeeeexxxxtttt and XXXXmmmmLLLLiiiisssstttt
  690.           widgets under a XXXXmmmmSSSSccccrrrroooolllllllleeeeddddWWWWiiiinnnnddddoooowwww widget. When such a widget
  691.           is created, its resources are available to both of the
  692.           underlying widgets. This can occasionally cause problems, as
  693.           when the programmer wants a XXXXmmmmNNNNddddeeeessssttttrrrrooooyyyyCCCCaaaallllllllbbbbaaaacccckkkk routine named
  694.           to act when the widget is destroyed. In this case, the
  695.           callback resource will be available to both sub-widgets, and
  696.           will cause an error when the widget is destroyed. To avoid
  697.           these problems, the programmer should separately create the
  698.           parent and child widgets, rather than relying on these
  699.           linked widgets.
  700.  
  701.           Use the _G_A_D_G_E_T or _W_I_D_G_E_Tkeyword to specify the object type
  702.           or to override the default variant for this object type.
  703.           You can use the Motif Toolkit name of an object type that
  704.           has a gadget variant (for example, XXXXmmmmLLLLaaaabbbbeeeellllGGGGaaaaddddggggeeeetttt) as an
  705.           attribute of an object declaration.  The _o_b_j_e_c_t__t_y_p_e can be
  706.           any object type, including gadgets.  You need to specify the
  707.           _G_A_D_G_E_T or _W_I_D_G_E_T keyword only in the declaration of an
  708.           object, not when you reference the object. You cannot
  709.           specify the _G_A_D_G_E_T or _W_I_D_G_E_T keyword for a user-defined
  710.           object; user-defined objects are always widgets.
  711.  
  712.         IIIIddddeeeennnnttttiiiiffffiiiieeeerrrr sssseeeeccccttttiiiioooonnnnssss
  713.           The identifier section allows you to define an identifier, a
  714.           mechanism that achieves run-time binding of data to names
  715.           that appear in a UIL module.  The identifier section
  716.           consists of the reserved keyword _I_D_E_N_T_I_F_I_E_R, followed by a
  717.           list of names, each name followed by a semicolon.
  718.  
  719.           _I_D_E_N_T_I_F_I_E_R _i_d_e_n_t_i_f_i_e_r__n_a_m_e;;;; [...;;;;]
  720.  
  721.  
  722.  
  723.      Page 11                                          (printed 4/6/01)
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  731.  
  732.  
  733.  
  734.           You can later use these names in the UIL module as either
  735.           the value of an argument to a widget or the tag value to a
  736.           callback procedure. At run time, you use the MRM functions
  737.           MMMMrrrrmmmmRRRReeeeggggiiiisssstttteeeerrrrNNNNaaaammmmeeeessss and MMMMrrrrmmmmRRRReeeeggggiiiisssstttteeeerrrrNNNNaaaammmmeeeessssIIIInnnnHHHHiiiieeeerrrraaaarrrrcccchhhhyyyyto bind the
  738.           identifier name with the data (or, in the case of callbacks,
  739.           with the address of the data) associated with the
  740.           identifier.
  741.  
  742.           Each UIL module has a single name space; therefore, you
  743.           cannot use a name you used for a value, object, or procedure
  744.           as an identifier name in the same module.
  745.  
  746.           The UIL compiler does not do any type checking on the use of
  747.           identifiers in a UIL module. Unlike a UIL value, an
  748.           identifier does not have a UIL type associated with it.
  749.           Regardless of what particular type a widget argument or
  750.           callback procedure tag is defined to be, you can use an
  751.           identifier in that context instead of a value of the
  752.           corresponding type.
  753.  
  754.           To reference these identifier names in a UIL module, you use
  755.           the name of the identifier wherever you want its value to be
  756.           used.
  757.  
  758.         IIIInnnncccclllluuuuddddeeee ddddiiiirrrreeeeccccttttiiiivvvveeeessss
  759.           The include directive incorporates the contents of a
  760.           specified file into a UIL module. This mechanism allows
  761.           several UIL modules to share common definitions. The syntax
  762.           for the include directive is as follows:
  763.  
  764.           INCLUDE FILE _f_i_l_e__n_a_m_e;
  765.  
  766.           The UIL compiler replaces the include directive with the
  767.           contents of the include file and processes it as if these
  768.           contents had appeared in the current UIL source file.
  769.  
  770.           You can nest include files; that is, an include file can
  771.           contain include directives.  The UIL compiler can process up
  772.           to 100 references (including the file containing the UIL
  773.           module). Therefore, you can include up to 99 files in a
  774.           single UIL module, including nested files. Each time a file
  775.           is opened counts as a reference, so including the same file
  776.           twice counts as two references.
  777.  
  778.           The _f_i_l_e__n_a_m_e is a simple string containing a file
  779.           specification that identifies the file to be included. The
  780.           rules for finding the specified file are similar to the
  781.           rules for finding header, or ....hhhh files using the include
  782.           directive, ####iiiinnnncccclllluuuuddddeeee, with a quoted string in C. The UIL uses
  783.           the ----IIII ooooppppttttiiiioooonnnn ffffoooorrrr ssssppppeeeecccciiiiffffyyyyiiiinnnngggg aaaa sssseeeeaaaarrrrcccchhhh ddddiiiirrrreeeeccccttttoooorrrryyyy ffffoooorrrr iiiinnnncccclllluuuuddddeeee
  784.           ffffiiiilllleeeessss....
  785.  
  786.  
  787.  
  788.  
  789.      Page 12                                          (printed 4/6/01)
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  797.  
  798.  
  799.  
  800.              ++++oooo  If you do not supply a directory, the UIL compiler
  801.                 searches for the include file in the directory of the
  802.                 main source file.
  803.  
  804.              +o  If the compiler does not find the include file there,
  805.                 the compiler looks in the same directory as the source
  806.                 file.
  807.  
  808.              +o  If you supply a directory, the UIL compiler searches
  809.                 only that directory for the file.
  810.  
  811.         NNNNaaaammmmeeeessss aaaannnndddd SSSSttttrrrriiiinnnnggggssss
  812.           Names can consist of any of the characters A to Z, a to z, 0
  813.           to 9, $ (dollar sign), and _ (underscore). Names cannot
  814.           begin with a digit (0 to 9). The maximum length of a name is
  815.           31 characters.
  816.  
  817.           UIL gives you a choice of either case-sensitive or case-
  818.           insensitive names through a clause in the _M_O_D_U_L_E header.
  819.           For example, if names are case sensitive, the names "sample"
  820.           and "Sample" are distinct from each other. If names are case
  821.           insensitive, these names are treated as the same name and
  822.           can be used interchangeably. By default, UIL assumes names
  823.           are case sensitive.
  824.  
  825.           In CCCCAAAASSSSEEEE----IIIINNNNSSSSEEEENNNNSSSSIIIITTTTIIIIVVVVEEEE mode, the compiler outputs all names in
  826.           the UID file in uppercase form.  In CCCCAAAASSSSEEEE----SSSSEEEENNNNSSSSIIIITTTTIIIIVVVVEEEE mode,
  827.           names appear in the UIL file exactly as they appear in the
  828.           source.
  829.  
  830.           The following table lists the reserved keywords, which are
  831.           not available for defining programmer defined names.
  832.                         RRRReeeesssseeeerrrrvvvveeeedddd KKKKeeeeyyyywwwwoooorrrrddddssss
  833.           ARGUMENTS    CALLBACKS   CONTROLS   END
  834.           EXPORTED     FALSE       GADGET     IDENTIFIER
  835.           INCLUDE      LIST        MODULE     OFF
  836.           ON           OBJECT      PRIVATE    PROCEDURE
  837.           PROCEDURES   TRUE        VALUE      WIDGET
  838.  
  839.           The UIL unreserved keywords are described in the following
  840.           list and table.  These keywords can be used as programmer
  841.           defined names, however, if you use any keyword as a name,
  842.           you cannot use the UIL-supplied usage of that keyword.
  843.  
  844.              +o  Built-in argument names (for example, XXXXmmmmNNNNxxxx, XXXXmmmmNNNNhhhheeeeiiiigggghhhhtttt)
  845.  
  846.              +o  Built-in reason names (for example,
  847.                 XXXXmmmmNNNNaaaaccccttttiiiivvvvaaaatttteeeeCCCCaaaallllllllbbbbaaaacccckkkk, XXXXmmmmNNNNhhhheeeellllppppCCCCaaaallllllllbbbbaaaacccckkkk)
  848.  
  849.              +o  Character set names (for example, _I_S_O__L_A_T_I_N_1,
  850.                 _I_S_O__H_E_B_R_E_W__L_R)
  851.  
  852.  
  853.  
  854.  
  855.      Page 13                                          (printed 4/6/01)
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  863.  
  864.  
  865.  
  866.              +o  Constant value names (for example, XXXXmmmmMMMMEEEENNNNUUUU____OOOOPPPPTTTTIIIIOOOONNNN,
  867.                 XXXXmmmmBBBBRRRROOOOWWWWSSSSEEEE____SSSSEEEELLLLEEEECCCCTTTT)
  868.  
  869.              +o  Object types (for example, XXXXmmmmPPPPuuuusssshhhhBBBBuuuuttttttttoooonnnn,
  870.                 XXXXmmmmBBBBuuuulllllllleeeettttiiiinnnnBBBBooooaaaarrrrdddd)
  871.                                          UUUUnnnnrrrreeeesssseeeerrrrvvvveeeedddd KKKKeeeeyyyywwwwoooorrrrddddssss
  872.                 ANY                         ARGUMENT                ASCIZ_STRING_TABLE
  873.                 ASCIZ_TABLE                 BACKGROUND              BOOLEAN
  874.                 CASE_INSENSITIVE            CASE_SENSITIVE          CHARACTER_SET
  875.                 COLOR                       COLOR_TABLE             COMPOUND_STRING
  876.                 COMPOUND_STRING_COMPONENT   COMPOUND_STRING_TABLE   FILE
  877.                 FLOAT                       FONT                    FONT_TABLE
  878.                 FONTSET                     FOREGROUND              ICON
  879.                 IMPORTED                    INTEGER                 INTEGER_TABLE
  880.                 KEYSYM                      MANAGED                 NAMES
  881.                 OBJECTS                     REASON                  RGB
  882.                 RIGHT_TO_LEFT               SINGLE_FLOAT            STRING
  883.                 STRING_TABLE                TRANSLATION_TABLE       UNMANAGED
  884.                 USER_DEFINED                VERSION                 WIDE_CHARACTER
  885.                 WIDGET                      XBITMAPFILE
  886.  
  887.           String literals can be composed of the uppercase and
  888.           lowercase letters, digits, and punctuation characters.
  889.           Spaces, tabs, and comments are special elements in the
  890.           language. They are a means of delimiting other elements,
  891.           such as two names. One or more of these elements can appear
  892.           before or after any other element in the language.  However,
  893.           spaces, tabs, and comments that appear in string literals
  894.           are treated as character sequences rather than delimiters.
  895.  
  896.         DDDDaaaattttaaaa TTTTyyyyppppeeeessss
  897.           UIL provides literals for several of the value types it
  898.           supports. Some of the value types are not supported as
  899.           literals (for example, pixmaps and string tables). You can
  900.           specify values for these types by using functions described
  901.           in the _F_u_n_c_t_i_o_n_s section.  UIL directly supports the
  902.           following literal types:
  903.  
  904.              +o  String literal
  905.  
  906.              +o  Integer literal
  907.  
  908.              +o  Boolean literal
  909.  
  910.              +o  Floating-point literal
  911.  
  912.           UIL also includes the data type _A_N_Y, which is used to turn
  913.           off compile time checking of data types.
  914.  
  915.         SSSSttttrrrriiiinnnngggg LLLLiiiitttteeeerrrraaaallllssss
  916.           A string literal is a sequence of zero or more 8-bit or 16-
  917.           bit characters or a combination delimited by '''' (single
  918.  
  919.  
  920.  
  921.      Page 14                                          (printed 4/6/01)
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  929.  
  930.  
  931.  
  932.           quotation marks) or """" (double quotation marks).  String
  933.           literals can also contain multibyte characters delimited
  934.           with double quotation marks.  String literals can be no more
  935.           than 2000 characters long.
  936.  
  937.           A single-quoted string literal can span multiple source
  938.           lines. To continue a single-quoted string literal, terminate
  939.           the continued line with a \\\\ (backslash). The literal
  940.           continues with the first character on the next line.
  941.  
  942.           Double-quoted string literals cannot span multiple source
  943.           lines.  (Because double-quoted strings can contain escape
  944.           sequences and other special characters, you cannot use the
  945.           backslash character to designate continuation of the
  946.           string.) To build a string value that must span multiple
  947.           source lines, use the concatenation operator described later
  948.           in this section.
  949.  
  950.           The syntax of a string literal is one of the following:
  951.  
  952.           '[_c_h_a_r_a_c_t_e_r__s_t_r_i_n_g]'
  953.           [#_c_h_a_r__s_e_t]"[_c_h_a_r_a_c_t_e_r__s_t_r_i_n_g]"
  954.  
  955.           Both string forms associate a character set with a string
  956.           value.  UIL uses the following rules to determine the
  957.           character set and storage format for string literals:
  958.  
  959.              +o  A string declared as ''''_s_t_r_i_n_g'''' is equivalent to
  960.                 ####_c_u_r__c_h_a_r_s_e_t""""_s_t_r_i_n_g"""", where _c_u_r__c_h_a_r_s_e_t will be the
  961.                 codeset portion of the value of the _L_A_N_G environment
  962.                 variable if it is set or the value of
  963.                 XXXXmmmmFFFFAAAALLLLLLLLBBBBAAAACCCCKKKK____CCCCHHHHAAAARRRRSSSSEEEETTTT if _L_A_N_G is not set or has no
  964.                 codeset component.  By default, XXXXmmmmFFFFAAAALLLLLLLLBBBBAAAACCCCKKKK____CCCCHHHHAAAARRRRSSSSEEEETTTT is
  965.                 IIIISSSSOOOO8888888855559999----1111 (equivalent to _I_S_O__L_A_T_I_N_1), but vendors may
  966.                 define a different default.
  967.  
  968.              +o  A string declared as """"_s_t_r_i_n_g"""" is equivalent to
  969.                 ####_c_h_a_r__s_e_t""""_s_t_r_i_n_g"""" if you specified _c_h_a_r__s_e_t as the
  970.                 default character set for the module.  If no default
  971.                 character set has been specified for the module, then
  972.                 if the ----ssss option is provided to the uuuuiiiillll command or the
  973.                 uuuusssseeee____sssseeeettttllllooooccccaaaalllleeee____ffffllllaaaagggg is set for the callable compiler,
  974.                 UUUUiiiillll(((()))), the string will be interpreted to be a string
  975.                 in the current locale. This means that the string is
  976.                 parsed in the locale of the user by calling _s_e_t_l_o_c_a_l_e,
  977.                 its charset is XXXXmmmmFFFFOOOONNNNTTTTLLLLIIIISSSSTTTT____DDDDEEEEFFFFAAAAUUUULLLLTTTT____TTTTAAAAGGGG, and that if the
  978.                 string is converted to a compound string, it is stored
  979.                 as a locale encoded text segment.  Otherwise, """"_s_t_r_i_n_g""""
  980.                 is equivalent to ####_c_u_r__c_h_a_r_s_e_t""""_s_t_r_i_n_g"""", where
  981.                 _c_u_r__c_h_a_r_s_e_t is interpreted as described for single
  982.                 quoted strings.
  983.  
  984.  
  985.  
  986.  
  987.      Page 15                                          (printed 4/6/01)
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  995.  
  996.  
  997.  
  998.              +o  A string of the form """"_s_t_r_i_n_g"""" or ####_c_h_a_r__s_e_t""""_s_t_r_i_n_g"""" is
  999.                 stored as a null-terminated string.
  1000.  
  1001.           If the _c_h_a_r__s_e_t in a string specified in the form above is
  1002.           not a built-in charset, and is not a user-defined charset,
  1003.           the charset of the string will be set to
  1004.           XXXXmmmmFFFFOOOONNNNTTTTLLLLIIIISSSSTTTT____DDDDEEEEFFFFAAAAUUUULLLLTTTT____TTTTAAAAGGGG, and an informational message will be
  1005.           issued to the user to note that this substitution has been
  1006.           made.
  1007.  
  1008.           The following table lists the character sets supported by
  1009.           the UIL compiler for string literals.  Note that several UIL
  1010.           names map to the same character set. In some cases, the UIL
  1011.           name influences how string literals are read. For example,
  1012.           strings identified by a UIL character set name ending in __L_R
  1013.           are read left-to-right.  Names that end in a different
  1014.           number reflect different fonts (for example, ISO_LATIN1 or
  1015.           ISO_LATIN6).  All character sets in this table are
  1016.           represented by 8 bits.
  1017.                       SSSSuuuuppppppppoooorrrrtttteeeedddd CCCChhhhaaaarrrraaaacccctttteeeerrrr SSSSeeeettttssss
  1018.           UUUUIIIILLLL NNNNaaaammmmeeee        DDDDeeeessssccccrrrriiiippppttttiiiioooonnnn
  1019.           _I_S_O__L_A_T_I_N_1      GL: ASCII, GR: Latin-1 Supplement
  1020.           _I_S_O__L_A_T_I_N_2      GL: ASCII, GR: Latin-2 Supplement
  1021.           _I_S_O__A_R_A_B_I_C      GL: ASCII, GR: Latin-Arabic
  1022.                           Supplement
  1023.           _I_S_O__L_A_T_I_N_6      GL: ASCII, GR: Latin-Arabic
  1024.                           Supplement
  1025.           _I_S_O__G_R_E_E_K       GL: ASCII, GR: Latin-Greek
  1026.                           Supplement
  1027.           _I_S_O__L_A_T_I_N_7      GL: ASCII, GR: Latin-Greek
  1028.                           Supplement
  1029.           _I_S_O__H_E_B_R_E_W      GL: ASCII, GR: Latin-Hebrew
  1030.                           Supplement
  1031.           _I_S_O__L_A_T_I_N_8      GL: ASCII, GR: Latin-Hebrew
  1032.                           Supplement
  1033.           _I_S_O__H_E_B_R_E_W__L_R   GL: ASCII, GR: Latin-Hebrew
  1034.                           Supplement
  1035.           _I_S_O__L_A_T_I_N_8__L_R   GL: ASCII, GR: Latin-Hebrew
  1036.                           Supplement
  1037.           _J_I_S__K_A_T_A_K_A_N_A    GL: JIS Roman, GR: JIS Katakana
  1038.  
  1039.           Following are the parsing rules for each of the character
  1040.           sets:
  1041.  
  1042.           All character sets
  1043.                     Character codes in the range 00...1F, 7F, and
  1044.                     80...9F are control characters including both
  1045.                     bytes of 16-bit characters.  The compiler flags
  1046.                     these as illegal characters.
  1047.  
  1048.           IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN1111 IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN2222 IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN3333 IIIISSSSOOOO____GGGGRRRREEEEEEEEKKKK IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN4444
  1049.                     These sets are parsed from left to right.  The
  1050.  
  1051.  
  1052.  
  1053.      Page 16                                          (printed 4/6/01)
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1061.  
  1062.  
  1063.  
  1064.                     escape sequences for null-terminated strings are
  1065.                     also supported by these character sets.
  1066.  
  1067.           IIIISSSSOOOO____HHHHEEEEBBBBRRRREEEEWWWW IIIISSSSOOOO____AAAARRRRAAAABBBBIIIICCCC IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN8888
  1068.                     These sets are parsed from right to left. For
  1069.                     example, the string #ISO_HEBREW"012345" will
  1070.                     generate a primitive string of "543210" with
  1071.                     character set _I_S_O__H_E_B_R_E_W. The string direction for
  1072.                     such a string would be right-to-left, so when
  1073.                     rendered, the string will appear as "012345." The
  1074.                     escape sequences for null-terminated strings are
  1075.                     also supported by these character sets, and the
  1076.                     characters that compose the escape sequences are
  1077.                     in left-to-right order. For example, you would
  1078.                     enter \n, not n\.
  1079.  
  1080.           IIIISSSSOOOO____HHHHEEEEBBBBRRRREEEEWWWW____LLLLRRRR IIIISSSSOOOO____AAAARRRRAAAABBBBIIIICCCC____LLLLRRRR IIIISSSSOOOO____LLLLAAAATTTTIIIINNNN8888____LLLLRRRR
  1081.                     These sets are parsed from left to right. For
  1082.                     example, the string #ISO_HEBREW_LR"012345"
  1083.                     generates a primitive string "012345" with
  1084.                     character set _I_S_O__H_E_B_R_E_W. The string direction for
  1085.                     such a string would still be right-to-left,
  1086.                     however, so when rendered, it will appear as
  1087.                     "543210." In other words, the characters were
  1088.                     originally typed in the _s_a_m_e _o_r_d_e_r in which they
  1089.                     would have been typed in Hebrew (although in
  1090.                     Hebrew, the typist would have been using a text
  1091.                     editor that went from right to left). The escape
  1092.                     sequences for null-terminated strings are also
  1093.                     supported by these character sets.
  1094.  
  1095.           _J_I_S__K_A_T_A_K_A_N_A
  1096.                     This set is parsed from left to right. The escape
  1097.                     sequences for null-terminated strings are also
  1098.                     supported by this character set. Note that the \\\\
  1099.                     (backslash) may be displayed as a yen symbol.
  1100.  
  1101.           In addition to designating parsing rules for strings,
  1102.           character set information remains an attribute of a compound
  1103.           string.  If the string is included in a string consisting of
  1104.           several concatenated segments, the character set information
  1105.           is included with that string segment.  This gives the Motif
  1106.           Toolkit the information it needs to decipher the compound
  1107.           string and choose a font to display the string.
  1108.  
  1109.           For an application interface displayed only in English, UIL
  1110.           lets you ignore the distinctions between the two uses of
  1111.           strings.  The compiler recognizes by context when a string
  1112.           must be passed as a null-terminated string or as a compound
  1113.           string.
  1114.  
  1115.           The UIL compiler recognizes enough about the various
  1116.  
  1117.  
  1118.  
  1119.      Page 17                                          (printed 4/6/01)
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1127.  
  1128.  
  1129.  
  1130.           character sets to correctly parse string literals.  The
  1131.           compiler also issues errors if you use a compound string in
  1132.           a context that supports only null-terminated strings.
  1133.  
  1134.           Since the character set names are keywords, you must put
  1135.           them in lowercase if case-sensitive names are in force.  If
  1136.           names are case insensitive, character set names can be
  1137.           uppercase, lowercase, or mixed case.
  1138.  
  1139.           In addition to the built-in character sets recognized by
  1140.           UIL, you can define your own character sets with the
  1141.           _C_H_A_R_A_C_T_E_R__S_E_T function. You can use the _C_H_A_R_A_C_T_E_R__S_E_T
  1142.           function anywhere a character set can be specified.
  1143.  
  1144.           String literals can contain characters with the eighth
  1145.           (high-order) bit set. You cannot type control characters
  1146.           (00-1F, 7F, and 80-9F) directly in a single-quoted string
  1147.           literal. However, you can represent these characters with
  1148.           escape sequences. The following list shows the escape
  1149.           sequences for special characters.
  1150.  
  1151.           \\\\bbbb        Backspace
  1152.  
  1153.           \\\\ffff        Form-feed
  1154.  
  1155.           \\\\nnnn        Newline
  1156.  
  1157.           \\\\rrrr        Carriage return
  1158.  
  1159.           \\\\tttt        Horizontal tab
  1160.  
  1161.           \\\\vvvv        Vertical tab
  1162.  
  1163.           \\\\''''        Single quotation mark
  1164.  
  1165.           \\\\""""        Double quotation mark
  1166.  
  1167.           \\\\\\\\        Backslash
  1168.  
  1169.           \\\\_i_n_t_e_g_e_r\\\\ Character whose internal representation is given
  1170.                     by _i_n_t_e_g_e_r (in the range 0 to 255 decimal)
  1171.  
  1172.           Note that escape sequences are processed literally in
  1173.           strings that are parsed in the current locale (localized
  1174.           strings).
  1175.  
  1176.           The UIL compiler does not process newline characters in
  1177.           compound strings.  The effect of a newline character in a
  1178.           compound string depends only on the character set of the
  1179.           string, and the result is not guaranteed to be a multiline
  1180.           string.
  1181.  
  1182.  
  1183.  
  1184.  
  1185.      Page 18                                          (printed 4/6/01)
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1193.  
  1194.  
  1195.  
  1196.           CCCCoooommmmppppoooouuuunnnndddd SSSSttttrrrriiiinnnngggg LLLLiiiitttteeeerrrraaaallllssss
  1197.  
  1198.           A compound string consists of a string of 8-bit, 16-bit, or
  1199.           multibyte characters, a named character set, and a writing
  1200.           direction. Its UIL data type is ccccoooommmmppppoooouuuunnnndddd____ssssttttrrrriiiinnnngggg.
  1201.  
  1202.           The writing direction of a compound string is implied by the
  1203.           character set specified for the string. You can explicitly
  1204.           set the writing direction for a compound string by using the
  1205.           _C_O_M_P_O_U_N_D__S_T_R_I_N_Gfunction.
  1206.  
  1207.           A compound string can consist of a sequence of concatenated
  1208.           compound strings, null-terminated strings, or a combination
  1209.           of both, each of which can have a different character set
  1210.           property and writing direction. Use the concatenation
  1211.           operator & (ampersand) to create a sequence of compound
  1212.           strings.
  1213.  
  1214.           Each string in the sequence is stored, including the
  1215.           character set and writing direction information.
  1216.  
  1217.           Generally, a string literal is stored in the UID file as a
  1218.           compound string when the literal consists of concatenated
  1219.           strings having different character sets or writing
  1220.           directions, or when you use the string to specify a value
  1221.           for an argument that requires a compound string value. If
  1222.           you want to guarantee that a string literal is stored as a
  1223.           compound string, you must use the _C_O_M_P_O_U_N_D__S_T_R_I_N_G function.
  1224.  
  1225.           DDDDaaaattttaaaa SSSSttttoooorrrraaaaggggeeee CCCCoooonnnnssssuuuummmmppppttttiiiioooonnnn ffffoooorrrr SSSSttttrrrriiiinnnngggg LLLLiiiitttteeeerrrraaaallllssss
  1226.  
  1227.           The way a string literal is stored in the UID file depends
  1228.           on how you declare and use the string. The UIL compiler
  1229.           automatically converts a null-terminated string to a
  1230.           compound string if you use the string to specify the value
  1231.           of an argument that requires a compound string.  However,
  1232.           this conversion is costly in terms of storage consumption.
  1233.  
  1234.           _P_R_I_V_A_T_E, _E_X_P_O_R_T_E_D, and _I_M_P_O_R_T_E_D string literals require
  1235.           storage for a single allocation when the literal is
  1236.           declared; thereafter, storage is required for each reference
  1237.           to the literal. Literals declared in-line require storage
  1238.           for both an allocation and a reference.
  1239.  
  1240.           The following table summarizes data storage consumption for
  1241.           string literals. The storage requirement for an allocation
  1242.           consists of a fixed portion and a variable portion. The
  1243.           fixed portion of an allocation is roughly the same as the
  1244.           storage requirement for a reference (a few bytes).  The
  1245.           storage consumed by the variable portion depends on the size
  1246.           of the literal value (that is, the length of the string). To
  1247.           conserve storage space, avoid making string literal
  1248.  
  1249.  
  1250.  
  1251.      Page 19                                          (printed 4/6/01)
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1259.  
  1260.  
  1261.  
  1262.           declarations that result in an allocation per use.
  1263.                      DDDDaaaattttaaaa SSSSttttoooorrrraaaaggggeeee CCCCoooonnnnssssuuuummmmppppttttiiiioooonnnn ffffoooorrrr SSSSttttrrrriiiinnnngggg LLLLiiiitttteeeerrrraaaallllssss
  1264.                                              SSSSttttoooorrrraaaaggggeeee RRRReeeeqqqquuuuiiiirrrreeeemmmmeeeennnnttttssss
  1265.                                              PPPPeeeerrrr UUUUsssseeee
  1266.                                              An allocation and a reference
  1267.                                              (within the module)
  1268.                                              A reference (within the module)
  1269.                                              A reference (within the UID
  1270.                                              hierarchy)
  1271.                                              A reference (within the UID
  1272.                                              hierarchy)
  1273.                                              An allocation and a reference
  1274.                                              (within the module)
  1275.          DDDDeeeeccccllllaaaarrrraaaattttiiiioooonnnn   DDDDaaaattttaaaa TTTTyyyyppppeeee   UUUUsssseeeedddd AAAAssss   An allocation and a reference
  1276.                                              (within the module)
  1277.                                              A reference (within the UID
  1278.                                              hierarchy)
  1279.                                              A reference (within the UID
  1280.                                              hierarchy)
  1281.                                              An allocation and a reference
  1282.                                              (within the module)
  1283.                                              A reference (within the module)
  1284.                                              A reference (within the UID
  1285.                                              hierarchy)
  1286.                                              A reference (within the UID
  1287.                                              hierarchy)
  1288.  
  1289.         IIIInnnntttteeeeggggeeeerrrr LLLLiiiitttteeeerrrraaaallllssss
  1290.           An integer literal represents the value of a whole number.
  1291.           Integer literals have the form of an optional sign followed
  1292.           by one or more decimal digits.  An integer literal must not
  1293.           contain embedded spaces or commas.
  1294.  
  1295.           Integer literals are stored in the UID file as 32-bit
  1296.           integers.  Exported and imported integer literals require a
  1297.           single allocation when the literal is declared; thereafter,
  1298.           a few bytes of storage are required for each reference to
  1299.           the literal. Private integer literals and those declared
  1300.           in-line require allocation and reference storage per use. To
  1301.           conserve storage space, avoid making integer literal
  1302.           declarations that result in an allocation per use.
  1303.  
  1304.           The following table shows data storage consumption for
  1305.           integer literals.
  1306.              DDDDaaaattttaaaa SSSSttttoooorrrraaaaggggeeee CCCCoooonnnnssssuuuummmmppppttttiiiioooonnnn ffffoooorrrr IIIInnnntttteeeeggggeeeerrrr
  1307.              LLLLiiiitttteeeerrrraaaallllssss
  1308.           DDDDeeeeccccllllaaaarrrraaaattttiiiioooonnnn   SSSSttttoooorrrraaaaggggeeee RRRReeeeqqqquuuuiiiirrrreeeemmmmeeeennnnttttssss PPPPeeeerrrr UUUUsssseeee
  1309.                         An allocation and a
  1310.                         reference (within the
  1311.                         module)
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.      Page 20                                          (printed 4/6/01)
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1325.  
  1326.  
  1327.  
  1328.           In-line
  1329.  
  1330.  
  1331.  
  1332.  
  1333.  
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.  
  1347.  
  1348.  
  1349.  
  1350.  
  1351.  
  1352.  
  1353.  
  1354.  
  1355.  
  1356.  
  1357.  
  1358.  
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.      Page 21                                          (printed 4/6/01)
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1391.  
  1392.  
  1393.  
  1394.           Private       An allocation and a
  1395.                         reference (within the
  1396.                         module)
  1397.           Exported      A reference (within the UID
  1398.                         hierarchy)
  1399.           Imported      A reference (within the UID
  1400.                         hierarchy)
  1401.  
  1402.         BBBBoooooooolllleeeeaaaannnn LLLLiiiitttteeeerrrraaaallll
  1403.           A Boolean literal represents the value True (reserved
  1404.           keyword TTTTRRRRUUUUEEEEor OOOOnnnn) or False (reserved keyword FFFFAAAALLLLSSSSEEEE or OOOOffffffff).
  1405.           These keywords are subject to case-sensitivity rules.
  1406.  
  1407.           In a UID file, TTTTRRRRUUUUEEEE is represented by the integer value 1
  1408.           and FFFFAAAALLLLSSSSEEEE is represented by the integer value 0 (zero).
  1409.  
  1410.           Data storage consumption for Boolean literals is the same as
  1411.           that for integer literals.
  1412.  
  1413.         FFFFllllooooaaaattttiiiinnnngggg----PPPPooooiiiinnnntttt LLLLiiiitttteeeerrrraaaallll
  1414.           A floating-point literal represents the value of a real (or
  1415.           float) number.  Floating-point literals have the following
  1416.           form:
  1417.  
  1418.           [+|-][_i_n_t_e_g_e_r]._i_n_t_e_g_e_r[E|e[+|-]_e_x_p_o_n_e_n_t]
  1419.  
  1420.           For maximum portability, a floating-point literal can
  1421.           represent values in the range 1.0E-37 to 1.0E+37 with at
  1422.           least 6 significant digits.  On many machines this range
  1423.           will be wider, with more significant digits.  A floating-
  1424.           point literal must not contain embedded spaces or commas.
  1425.  
  1426.           Floating-point literals are stored in the UID file as
  1427.           double-precision, floating-point numbers.  The following
  1428.           table gives examples of valid and invalid floating-point
  1429.           notation for the UIL compiler.
  1430.                               FFFFllllooooaaaattttiiiinnnngggg PPPPooooiiiinnnntttt LLLLiiiitttteeeerrrraaaallllssss
  1431.           VVVVaaaalllliiiidddd FFFFllllooooaaaattttiiiinnnngggg----PPPPooooiiiinnnntttt LLLLiiiitttteeeerrrraaaallllssss   IIIInnnnvvvvaaaalllliiiidddd FFFFllllooooaaaattttiiiinnnngggg----PPPPooooiiiinnnntttt LLLLiiiitttteeeerrrraaaallllssss
  1432.           1.0                             1e1 (no decimal point)
  1433.           3.1415E-2 (equals .031415)      2.87 e6 (embedded blanks)
  1434.           -6.29e7 (equals -62900000)      2.0e100 (out of range)
  1435.  
  1436.           Data storage consumption for floating-point literals is the
  1437.           same as that for integer literals.
  1438.  
  1439.           The purpose of the _A_N_Ydata type is to shut off the data-type
  1440.           checking feature of the UIL compiler.  You can use the
  1441.           _A_N_Ydata type for the following:
  1442.  
  1443.              +o  Specifying the type of a callback procedure tag
  1444.  
  1445.              +o  Specifying the type of a user-defined argument
  1446.  
  1447.  
  1448.  
  1449.      Page 22                                          (printed 4/6/01)
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1457.  
  1458.  
  1459.  
  1460.           You can use the _A_N_Ydata type when you need to use a type not
  1461.           supported by the UIL compiler or when you want the data-type
  1462.           restrictions imposed by the compiler to be relaxed.  For
  1463.           example, you might want to define a widget having an
  1464.           argument that can accept different types of values,
  1465.           depending on run-time circumstances.
  1466.  
  1467.           If you specify that an argument takes an _A_N_Yvalue, the
  1468.           compiler does not check the type of the value specified for
  1469.           that argument; therefore, you need to take care when
  1470.           specifying a value for an argument of type _A_N_Y.  You could
  1471.           get unexpected results at run time if you pass a value
  1472.           having a data type that the widget does not support for that
  1473.           argument.
  1474.  
  1475.         EEEExxxxpppprrrreeeessssssssiiiioooonnnnssss
  1476.           UIL includes compile-time value expressions. These
  1477.           expressions can contain references to other UIL values, but
  1478.           cannot be forward referenced.
  1479.  
  1480.           The following table lists the set of operators in UIL that
  1481.           allow you to create integer, real, and Boolean values based
  1482.           on other values defined with the UIL module. In the table, a
  1483.           precedence of 1 is the highest.
  1484.           VVVVaaaalllliiiidddd OOOOppppeeeerrrraaaattttoooorrrrssss
  1485.           OOOOppppeeeerrrraaaattttoooorrrr   OOOOppppeeeerrrraaaannnndddd TTTTyyyyppppeeeessss     MMMMeeeeaaaannnniiiinnnngggg            PPPPrrrreeeecccceeeeddddeeeennnncccceeee
  1486.              ~       Boolean           NOT                    1
  1487.                      integer           One's complement
  1488.              -       float             Negate                 1
  1489.                      integer           Negate
  1490.              +       float             NOP                    1
  1491.                      integer           NOP
  1492.              *       float,float       Multiply               2
  1493.                      integer,integer   Multiply
  1494.              /       float,float       Divide                 2
  1495.                      integer,integer   Divide
  1496.              +       float,float       Add                    3
  1497.                      integer,integer   Add
  1498.              -       float,float       Subtract               3
  1499.                      integer,integer   Subtract
  1500.              >>      integer,integer   Shift right            4
  1501.              <<      integer,integer   Shift left             4
  1502.              &       Boolean,Boolean   AND                    5
  1503.                      integer,integer   Bitwise AND
  1504.                      string,string     Concatenate
  1505.              |       Boolean,Boolean   OR                     6
  1506.                      integer,integer   Bitwise OR
  1507.              ^       Boolean,Boolean   XOR                    6
  1508.                      integer,integer   Bitwise XOR
  1509.  
  1510.           A string can be either a single compound string or a
  1511.           sequence of compound strings. If the two concatenated
  1512.  
  1513.  
  1514.  
  1515.      Page 23                                          (printed 4/6/01)
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1523.  
  1524.  
  1525.  
  1526.           strings have different properties (such as writing direction
  1527.           or character set), the result of the concatenation is a
  1528.           multisegment compound string.
  1529.  
  1530.           The string resulting from the concatenation is a null-
  1531.           terminated string unless one or more of the following
  1532.           conditions exists:
  1533.  
  1534.              +o  One of the operands is a compound string
  1535.  
  1536.              +o  The operands have different character set properties
  1537.  
  1538.              +o  The operands have different writing directions
  1539.  
  1540.           Then the resulting string is a compound string.  You cannot
  1541.           use imported or exported values as operands of the
  1542.           concatenation operator.
  1543.  
  1544.           The result of each operator has the same type as its
  1545.           operands.  You cannot mix types in an expression without
  1546.           using conversion routines.
  1547.  
  1548.           You can use parentheses to override the normal precedence of
  1549.           operators.  In a sequence of unary operators, the operations
  1550.           are performed in right-to-left order. For example, ---- ++++ ----AAAA is
  1551.           equivalent to ----((((++++((((----AAAA)))))))).  In a sequence of binary operators
  1552.           of the same precedence, the operations are performed in
  1553.           left-to-right order. For example, AAAA****BBBB////CCCC****DDDD is equivalent to
  1554.           ((((((((AAAA****BBBB))))////CCCC))))****DDDD.
  1555.  
  1556.           A value declaration gives a value a name. You cannot
  1557.           redefine the value of that name in a subsequent value
  1558.           declaration.  You can use a value containing operators and
  1559.           functions anywhere you can use a value in a UIL module.  You
  1560.           cannot use imported values as operands in expressions.
  1561.  
  1562.           Several of the binary operators are defined for multiple
  1563.           data types.  For example, the operator for multiplication
  1564.           (****) is defined for both floating-point and integer operands.
  1565.  
  1566.           For the UIL compiler to perform these binary operations,
  1567.           both operands must be of the same type.  If you supply
  1568.           operands of different data types, the UIL compiler
  1569.           automatically converts one of the operands to the type of
  1570.           the other according to the following conversions rules:
  1571.  
  1572.              +o  If the operands are an integer and a Boolean, the
  1573.                 Boolean is converted to an integer.
  1574.  
  1575.              +o  If the operands are an integer and a floating-point,
  1576.                 the integer is converted to an floating-point.
  1577.  
  1578.  
  1579.  
  1580.  
  1581.      Page 24                                          (printed 4/6/01)
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1589.  
  1590.  
  1591.  
  1592.              +o  If the operands are a floating-point and a Boolean,
  1593.                 the Boolean is converted to a floating-point.
  1594.  
  1595.           You can also explicitly convert the data type of a value by
  1596.           using one of the conversion functions _I_N_T_E_G_E_R, _F_L_O_A_T or
  1597.           _S_I_N_G_L_E__F_L_O_A_T.
  1598.  
  1599.         FFFFuuuunnnnccccttttiiiioooonnnnssss
  1600.           UIL provides functions to generate the following types of
  1601.           values:
  1602.  
  1603.              +o  Character sets
  1604.  
  1605.              +o  Keysyms
  1606.  
  1607.              +o  Colors
  1608.  
  1609.              +o  Pixmaps
  1610.  
  1611.              +o  Single-precision, floating-point numbers
  1612.  
  1613.              +o  Double-precision, floating-point numbers
  1614.  
  1615.              +o  Fonts
  1616.  
  1617.              +o  Fontsets
  1618.  
  1619.              +o  Font tables
  1620.  
  1621.              +o  Compound strings
  1622.  
  1623.              +o  Compound string tables
  1624.  
  1625.              +o  ASCIZ (null-terminated) string tables
  1626.  
  1627.              +o  Wide character strings
  1628.  
  1629.              +o  Widget class names
  1630.  
  1631.              +o  Integer tables
  1632.  
  1633.              +o  Arguments
  1634.  
  1635.              +o  Reasons
  1636.  
  1637.              +o  Translation tables
  1638.  
  1639.           Remember that all examples in the following sections assume
  1640.           case-insensitive mode. Keywords are shown in uppercase
  1641.           letters to distinguish them from user-specified names, which
  1642.           are shown in lowercase letters.  This use of uppercase
  1643.           letters is not required in case-insensitive mode. In case-
  1644.  
  1645.  
  1646.  
  1647.      Page 25                                          (printed 4/6/01)
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1655.  
  1656.  
  1657.  
  1658.           sensitive mode, keywords must be in lowercase letters.
  1659.  
  1660.           CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT((((_s_t_r_i_n_g__e_x_p_r_e_s_s_i_o_n[, property[, ...]]))))
  1661.  
  1662.                     You can define your own character sets with the
  1663.                     _C_H_A_R_A_C_T_E_R__S_E_T function. You can use the
  1664.                     _C_H_A_R_A_C_T_E_R__S_E_T function anywhere a character set
  1665.                     can be specified.
  1666.  
  1667.                     The result of the _C_H_A_R_A_C_T_E_R__S_E_T function is a
  1668.                     character set with the name ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn and
  1669.                     the properties you specify.  ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn
  1670.                     must be a null-terminated string. You can
  1671.                     optionally include one or both of the following
  1672.                     clauses to specify properties for the resulting
  1673.                     character set:
  1674.  
  1675.           RIGHT_TO_LEFT = _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_nSIXTEEN_BIT = _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n
  1676.  
  1677.                     The _R_I_G_H_T__T_O__L_E_F_T clause sets the default writing
  1678.                     direction of the string from right to left if
  1679.                     _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n is True, and right to left
  1680.                     otherwise.
  1681.  
  1682.                     The _S_I_X_T_E_E_N__B_I_T clause allows the strings
  1683.                     associated with this character set to be
  1684.                     interpreted as 16-bit characters if
  1685.                     _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n is True, and 8-bit characters
  1686.                     otherwise.
  1687.  
  1688.           KKKKEEEEYYYYSSSSYYYYMMMM((((_s_t_r_i_n_g__l_i_t_e_r_a_l))))
  1689.  
  1690.                     The _K_E_Y_S_Y_M function is used to specify a keysym
  1691.                     for a mnemonic resource.  _s_t_r_i_n_g__l_i_t_e_r_a_l must
  1692.                     contain a valid KKKKeeeeyyyySSSSyyyymmmm name.  (See
  1693.                     XStringToKeysym(3 X11) for more information.)
  1694.  
  1695.           CCCCOOOOLLLLOOOORRRR((((ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn[,,,,FFFFOOOORRRREEEEGGGGRRRROOOOUUUUNNNNDDDD|_B_A_C_K_G_R_O_U_N_D]))))
  1696.  
  1697.                     The _C_O_L_O_R function supports the definition of
  1698.                     colors.  Using the _C_O_L_O_R function, you can
  1699.                     designate a value to specify a color and then use
  1700.                     that value for arguments requiring a color value.
  1701.                     The string expression names the color you want to
  1702.                     define; the optional keywords _F_O_R_E_G_R_O_U_N_D and
  1703.                     _B_A_C_K_G_R_O_U_N_D identify how the color is to be
  1704.                     displayed on a monochrome device when the color is
  1705.                     used in the definition of a color table.
  1706.  
  1707.                     The UIL compiler does not have built-in color
  1708.                     names. Colors are a server-dependent attribute of
  1709.                     an object. Colors are defined on each server and
  1710.  
  1711.  
  1712.  
  1713.      Page 26                                          (printed 4/6/01)
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1721.  
  1722.  
  1723.  
  1724.                     may have different red-green-blue (RGB) values on
  1725.                     each server. The string you specify as the color
  1726.                     argument must be recognized by the server on which
  1727.                     your application runs.
  1728.  
  1729.                     In a UID file, UIL represents a color as a
  1730.                     character string.  MRM calls X translation
  1731.                     routines that convert a color string to the
  1732.                     device-specific pixel value. If you are running on
  1733.                     a monochrome server, all colors translate to black
  1734.                     or white.  If you are on a color server, the color
  1735.                     names translate to their proper colors if the
  1736.                     following conditions are met:
  1737.  
  1738.                        +o  The color is defined.
  1739.  
  1740.                        +o  The color map is not yet full.
  1741.  
  1742.                     If the color map is full, even valid colors
  1743.                     translate to black or white (foreground or
  1744.                     background).
  1745.  
  1746.                     Interfaces do not, in general, specify colors for
  1747.                     widgets, so that the selection of colors can be
  1748.                     controlled by the user through the ....XXXXddddeeeeffffaaaauuuullllttttssssfile.
  1749.  
  1750.                     To write an application that runs on both
  1751.                     monochrome and color devices, you need to specify
  1752.                     which colors in a color table (defined with the
  1753.                     _C_O_L_O_R__T_A_B_L_Efunction) map to the background and
  1754.                     which colors map to the foreground.  UIL lets you
  1755.                     use the _C_O_L_O_R function to designate this mapping
  1756.                     in the definition of the color.  The following
  1757.                     example shows how to use the _C_O_L_O_R function to map
  1758.                     the color red to the background color on a
  1759.                     monochrome device:
  1760.  
  1761.           VALUE c: COLOR ( 'red',BACKGROUND );
  1762.  
  1763.                     The mapping comes into play only when the MRM is
  1764.                     given a color and the application is to be
  1765.                     displayed on a monochrome device. In this case,
  1766.                     each color is considered to be in one of the
  1767.                     following three categories:
  1768.  
  1769.                        +o  The color is mapped to the background color
  1770.                           on the monochrome device.
  1771.  
  1772.                        +o  The color is mapped to the foreground color
  1773.                           on the monochrome device.
  1774.  
  1775.                        +o  Monochrome mapping is undefined for this
  1776.  
  1777.  
  1778.  
  1779.      Page 27                                          (printed 4/6/01)
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1787.  
  1788.  
  1789.  
  1790.                           color.
  1791.  
  1792.                     If the color is mapped to the foreground or
  1793.                     background color, MRM substitutes the foreground
  1794.                     or background color, respectively. If you do not
  1795.                     specify the monochrome mapping for a color, MRM
  1796.                     passes the color string to the Motif Toolkit for
  1797.                     mapping to the foreground or background color.
  1798.  
  1799.           RRRRGGGGBBBB((((_r_e_d__i_n_t_e_g_e_r, _g_r_e_e_n__i_n_t_e_g_e_r, _b_l_u_e__i_n_t_e_g_e_r))))
  1800.  
  1801.                     The three integers define the values for the red,
  1802.                     green, and blue components of the color, in that
  1803.                     order. The values of these components can range
  1804.                     from 0 to 65,535, inclusive.  The values may be
  1805.                     represented as integer expressions.
  1806.  
  1807.                     In a UID file, UIL represents an _R_G_B value as
  1808.                     three integers.  MRM calls X translation routines
  1809.                     that convert the integers to the device-specific
  1810.                     pixel value.  If you are running on a monochrome
  1811.                     server, all colors translate to black or white.
  1812.                     If you are on a color server, _R_G_B values translate
  1813.                     to their proper colors if the colormap is not yet
  1814.                     full.  If the colormap is full, values translate
  1815.                     to black or white (foreground or background).
  1816.  
  1817.           CCCCOOOOLLLLOOOORRRR____TTTTAAAABBBBLLLLEEEE((((_c_o_l_o_r__e_x_p_r_e_s_s_i_o_n====''''_c_h_a_r_a_c_t_e_r''''[,...]))))
  1818.  
  1819.                     The color expression is a previously defined
  1820.                     color, a color defined in line with the _C_O_L_O_R
  1821.                     function, or the phrase BBBBAAAACCCCKKKKGGGGRRRROOOOUUUUNNNNDDDD CCCCOOOOLLLLOOOORRRR or
  1822.                     FFFFOOOORRRREEEEGGGGRRRROOOOUUUUNNNNDDDD CCCCOOOOLLLLOOOORRRR. The character can be any valid
  1823.                     UIL character.
  1824.  
  1825.                     The _C_O_L_O_R__T_A_B_L_E function provides a device-
  1826.                     independent way to specify a set of colors.  The
  1827.                     _C_O_L_O_R__T_A_B_L_E function accepts either previously
  1828.                     defined UIL color names or in line color
  1829.                     definitions (using the _C_O_L_O_R function).  A color
  1830.                     table must be private because its contents must be
  1831.                     known by the UIL compiler to construct an icon.
  1832.                     The colors within a color table, however, can be
  1833.                     imported, exported, or private.
  1834.  
  1835.                     The single letter associated with each color is
  1836.                     the character you use to represent that color when
  1837.                     creating an icon.  Each letter used to represent a
  1838.                     color must be unique within the color table.
  1839.  
  1840.           IIIICCCCOOOONNNN(((([CCCCOOOOLLLLOOOORRRR____TTTTAAAABBBBLLLLEEEE====_c_o_l_o_r__t_a_b_l_e__n_a_m_e,] _r_o_w[,...))))
  1841.                     _c_o_l_o_r-_t_a_b_l_e-_n_a_m_e must refer to a previously
  1842.  
  1843.  
  1844.  
  1845.      Page 28                                          (printed 4/6/01)
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1853.  
  1854.  
  1855.  
  1856.                     defined color table, and _r_o_w is a character
  1857.                     expression giving one row of the icon.
  1858.  
  1859.                     The _I_C_O_N function describes a rectangular icon
  1860.                     that is x pixels wide and y pixels high.  The
  1861.                     strings surrounded by single quotation marks
  1862.                     describe the icon.  Each string represents a row
  1863.                     in the icon; each character in the string
  1864.                     represents a pixel.
  1865.  
  1866.                     The first row in an icon definition determines the
  1867.                     width of the icon.  All rows must have the same
  1868.                     number of characters as the first row.  The height
  1869.                     of the icon is dictated by the number of rows.
  1870.                     The maximum number of rows is 999.
  1871.  
  1872.                     The first argument of the _I_C_O_N function (the color
  1873.                     table specification) is optional and identifies
  1874.                     the colors that are available in this icon.  By
  1875.                     using the single letter associated with each
  1876.                     color, you can specify the color of each pixel in
  1877.                     the icon.  The icon must be constructed of
  1878.                     characters defined in the specified color table.
  1879.  
  1880.                     A default color table is used if you omit the
  1881.                     argument specifying the color table. To make use
  1882.                     of the default color table, the rows of your icon
  1883.                     must contain only spaces and asterisks.  The
  1884.                     default color table is defined as follows:
  1885.  
  1886.           COLOR_TABLE( BACKGROUND COLOR = ' ', FOREGROUND COLOR = '*')
  1887.  
  1888.                     You can define other characters to represent the
  1889.                     background color and foreground color by replacing
  1890.                     the space and asterisk in the BBBBAAAACCCCKKKKGGGGRRRROOOOUUUUNNNNDDDD CCCCOOOOLLLLOOOORRRRand
  1891.                     FFFFOOOORRRREEEEGGGGRRRROOOOUUUUNNNNDDDD CCCCOOOOLLLLOOOORRRR clauses shown in the previous
  1892.                     statement.  You can specify icons as private,
  1893.                     imported, or exported.  Use the MRM function
  1894.                     MMMMrrrrmmmmFFFFeeeettttcccchhhhIIIIccccoooonnnnLLLLiiiitttteeeerrrraaaallllto retrieve an exported icon at
  1895.                     run time.
  1896.  
  1897.           XXXXBBBBIIIITTTTMMMMAAAAPPPPFFFFIIIILLLLEEEE((((ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn))))
  1898.                     The _X_B_I_T_M_A_P_F_I_L_E function is similar to the _I_C_O_N
  1899.                     function in that both describe a rectangular icon
  1900.                     that is x pixels wide and y pixels high.  However,
  1901.                     _X_B_I_T_M_A_P_F_I_L_E allows you to specify an external file
  1902.                     containing the definition of an X bitmap, whereas
  1903.                     all _I_C_O_N function definitions must be coded
  1904.                     directly within UIL. X bitmap files can be
  1905.                     generated by many different X applications.  UIL
  1906.                     reads these files through the _X_B_I_T_M_A_P_F_I_L_E
  1907.                     function, but does not support creation of these
  1908.  
  1909.  
  1910.  
  1911.      Page 29                                          (printed 4/6/01)
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1919.  
  1920.  
  1921.  
  1922.                     files.  The X bitmap file specified as the
  1923.                     argument to the _X_B_I_T_M_A_P_F_I_L_E function is read at
  1924.                     application run time by MRM.
  1925.  
  1926.                     The _X_B_I_T_M_A_P_F_I_L_E function returns a value of type
  1927.                     _p_i_x_m_a_pand can be used anywhere a pixmap data type
  1928.                     is expected.
  1929.  
  1930.           SSSSIIIINNNNGGGGLLLLEEEE____FFFFLLLLOOOOAAAATTTT((((_r_e_a_l__n_u_m_b_e_r__l_i_t_e_r_a_l))))
  1931.  
  1932.                     The _S_I_N_G_L_E__F_L_O_A_T function lets you store
  1933.                     floating-point literals in UIL files as single-
  1934.                     precision, floating-point numbers.  Single-
  1935.                     precision floating-point numbers can often be
  1936.                     stored using less memory than double-precision,
  1937.                     floating-point numbers.  The _r_e_a_l__n_u_m_b_e_r__l_i_t_e_r_a_l
  1938.                     can be either an integer literal or a floating-
  1939.                     point literal.
  1940.  
  1941.           FFFFLLLLOOOOAAAATTTT((((_r_e_a_l__n_u_m_b_e_r__l_i_t_e_r_a_l))))
  1942.  
  1943.                     The _F_L_O_A_T function lets you store floating-point
  1944.                     literals in UIL files as double-precision,
  1945.                     floating-point numbers.  The _r_e_a_l__n_u_m_b_e_r__l_i_t_e_r_a_l
  1946.                     can be either an integer literal or a floating-
  1947.                     point literal.
  1948.  
  1949.           FFFFOOOONNNNTTTT((((ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn[,,,, CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT====_c_h_a_r__s_e_t]))))
  1950.  
  1951.                     You define fonts with the _F_O_N_T function.  Using
  1952.                     the _F_O_N_T function, you designate a value to
  1953.                     specify a font and then use that value for
  1954.                     arguments that require a font value.  The UIL
  1955.                     compiler has no built-in fonts.
  1956.  
  1957.                     Each font makes sense only in the context of a
  1958.                     character set.  The _F_O_N_T function has an
  1959.                     additional parameter to let you specify the
  1960.                     character set for the font.  This parameter is
  1961.                     optional; if you omit it, the default character
  1962.                     set depends on the value of the _L_A_N_G environment
  1963.                     variable if it is set, or on the value of
  1964.                     XXXXmmmmFFFFAAAALLLLLLLLBBBBAAAACCCCKKKK____CCCCHHHHAAAARRRRSSSSEEEETTTT if _L_A_N_Gis not set.
  1965.  
  1966.                     ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn specifies the name of the font
  1967.                     and the clause _C_H_A_R_A_C_T_E_R__S_E_T = _c_h_a_r__s_e_tspecifies
  1968.                     the character set for the font.  The string
  1969.                     expression used in the _F_O_N_T function cannot be a
  1970.                     compound string.
  1971.  
  1972.           FFFFOOOONNNNTTTTSSSSEEEETTTT((((ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn[,...][,,,, CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR____SSSSEEEETTTT====_c_h_a_r_s_e_t]))))
  1973.  
  1974.  
  1975.  
  1976.  
  1977.      Page 30                                          (printed 4/6/01)
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  1985.  
  1986.  
  1987.  
  1988.                     You define fontsets with the _F_O_N_T_S_E_T function.
  1989.                     Using the _F_O_N_T_S_E_T function, you designate a set of
  1990.                     values to specify fonts and then use those values
  1991.                     for arguments that require a fontset.  The UIL
  1992.                     compiler has no built-in fonts.
  1993.  
  1994.                     Each font makes sense only in the context of a
  1995.                     character set.  The _F_O_N_T_S_E_T function has an
  1996.                     additional parameter to let you specify the
  1997.                     character set for the font.  This parameter is
  1998.                     optional; if you omit it, the default character
  1999.                     set depends on the value of the _L_A_N_G environment
  2000.                     variable if it is set, or on the value of
  2001.                     XXXXmmmmFFFFAAAALLLLLLLLBBBBAAAACCCCKKKK____CCCCHHHHAAAARRRRSSSSEEEETTTT if _L_A_N_Gis not set.
  2002.  
  2003.                     The string expression specifies the name of the
  2004.                     font and the clause _C_H_A_R_A_C_T_E_R__S_E_T =
  2005.                     _c_h_a_r__s_e_tspecifies the character set for the font.
  2006.                     The string expression used in the _F_O_N_T_S_E_T function
  2007.                     cannot be a compound string.
  2008.  
  2009.           FFFFOOOONNNNTTTT____TTTTAAAABBBBLLLLEEEE((((_f_o_n_t__e_x_p_r_e_s_s_i_o_n[,...]))))
  2010.  
  2011.                     A font table is a sequence of pairs of fonts and
  2012.                     character sets. At run time, when an object needs
  2013.                     to display a string, the object scans the font
  2014.                     table for the character set that matches the
  2015.                     character set of the string to be displayed.  UIL
  2016.                     provides the _F_O_N_T__T_A_B_L_E function to let you supply
  2017.                     such an argument.  _f_o_n_t__e_x_p_r_e_s_s_i_o_n is created with
  2018.                     the _F_O_N_T and _F_O_N_T_S_E_T functions.
  2019.  
  2020.                     If you specify a single font value to specify an
  2021.                     argument that requires a font table, the UIL
  2022.                     compiler automatically converts a font value to a
  2023.                     font table.
  2024.  
  2025.           CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG((((ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn[,_p_r_o_p_e_r_t_y[,...]]))))
  2026.                     Use the _C_O_M_P_O_U_N_D__S_T_R_I_N_G function to set properties
  2027.                     of a null-terminated string and to convert it into
  2028.                     a compound string. The properties you can set are
  2029.                     the writing direction and separator.
  2030.  
  2031.                     The result of the _C_O_M_P_O_U_N_D__S_T_R_I_N_G function is a
  2032.                     compound string with the string expression as its
  2033.                     value. You can optionally include one or more of
  2034.                     the following clauses to specify properties for
  2035.                     the resulting compound string:
  2036.  
  2037.                     _R_I_G_H_T__T_O__L_E_F_T = _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n_S_E_P_A_R_A_T_E =
  2038.                     _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n
  2039.  
  2040.  
  2041.  
  2042.  
  2043.      Page 31                                          (printed 4/6/01)
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  2051.  
  2052.  
  2053.  
  2054.                     The _R_I_G_H_T__T_O__L_E_F_T clause sets the writing
  2055.                     direction of the string from right to left if
  2056.                     _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_nis True, and left to right
  2057.                     otherwise.  Specifying this argument does not
  2058.                     cause the value of the string expression to
  2059.                     change.  If you omit the _R_I_G_H_T__T_O__L_E_F_T argument,
  2060.                     the resulting string has the same writing
  2061.                     direction as ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn.
  2062.  
  2063.                     The _S_E_P_A_R_A_T_E clause appends a separator to the end
  2064.                     of the compound string if _b_o_o_l_e_a_n__e_x_p_r_e_s_s_i_o_n is
  2065.                     True. If you omit the _S_E_P_A_R_A_T_Eclause, the
  2066.                     resulting string does not have a separator.
  2067.  
  2068.                     You cannot use imported or exported values as the
  2069.                     operands of the _C_O_M_P_O_U_N_D__S_T_R_I_N_G function.
  2070.  
  2071.           _C_O_M_P_O_U_N_D__S_T_R_I_N_G__C_O_M_P_O_N_E_N_T(_c_o_m_p_o_n_e_n_t__t_y_p_e [, {_s_t_r_i_n_g | _e_n_u_m_v_a_l}])
  2072.                     Use the _C_O_M_P_O_U_N_D__S_T_R_I_N_G__C_O_M_P_O_N_E_N_T function to
  2073.                     create compound strings in UIL consisting of
  2074.                     single components.  This function is analagous to
  2075.                     XXXXmmmmSSSSttttrrrriiiinnnnggggCCCCoooommmmppppoooonnnneeeennnnttttCCCCrrrreeeeaaaatttteeee.  This function lets you
  2076.                     create simple compound strings containing
  2077.                     components such as XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____TTTTAAAABBBB and
  2078.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____RRRREEEENNNNDDDDIIIITTTTIIIIOOOONNNN____BBBBEEEEGGGGIIIINNNN which are not
  2079.                     produced by the _C_O_M_P_O_U_N_D__S_T_R_I_N_G function. These
  2080.                     components can then be concatenated to other
  2081.                     compound strings to build more complex compound
  2082.                     strings.
  2083.  
  2084.                     The first argument must be an
  2085.                     XXXXmmmmSSSSttttrrrriiiinnnnggggCCCCoooommmmppppoooonnnneeeennnnttttTTTTyyyyppppeeeeenumerated constant.  The
  2086.                     type and interpretation of the second argument
  2087.                     depends on the first argument.  For example, if
  2088.                     you specify any of the following enumerated
  2089.                     constants for the first argument, then you should
  2090.                     not specify a second argument:
  2091.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____SSSSEEEEPPPPAAAARRRRAAAATTTTOOOORRRR,
  2092.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____LLLLAAAAYYYYOOOOUUUUTTTT____PPPPOOOOPPPP,
  2093.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____TTTTAAAABBBB, and
  2094.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____LLLLOOOOCCCCAAAALLLLEEEE.  However, if you
  2095.                     specify an enumerated constant from the following
  2096.                     group, then you must supply a _s_t_r_i_n_g as the second
  2097.                     argument:  XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____CCCCHHHHAAAARRRRSSSSEEEETTTT,
  2098.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____TTTTEEEEXXXXTTTT,
  2099.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____LLLLOOOOCCCCAAAALLLLEEEE____TTTTEEEEXXXXTTTT,
  2100.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____WWWWIIIIDDDDEEEECCCCHHHHAAAARRRR____TTTTEEEEXXXXTTTT,
  2101.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____RRRREEEENNNNDDDDIIIITTTTIIIIOOOONNNN____BBBBEEEEGGGGIIIINNNN, and
  2102.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____RRRREEEENNNNDDDDIIIITTTTIIIIOOOONNNN____EEEENNNNDDDD.  If you specify
  2103.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____DDDDIIIIRRRREEEECCCCTTTTIIIIOOOONNNNas the first argument,
  2104.                     then you must specify an
  2105.                     XXXXmmmmSSSSttttrrrriiiinnnnggggDDDDiiiirrrreeeeccccttttiiiioooonnnnenumerated constant as the second
  2106.  
  2107.  
  2108.  
  2109.      Page 32                                          (printed 4/6/01)
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  2117.  
  2118.  
  2119.  
  2120.                     argument.  Finally, if you specify
  2121.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____LLLLAAAAYYYYOOOOUUUUTTTT____PPPPUUUUSSSSHHHHas the first
  2122.                     argument, then you must specify an
  2123.                     XXXXmmmmDDDDiiiirrrreeeeccccttttiiiioooonnnnenumerated constant as the second
  2124.                     argument.
  2125.  
  2126.                     The compound string components
  2127.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____RRRREEEENNNNDDDDIIIITTTTIIIIOOOONNNN____BBBBEEEEGGGGIIIINNNN, and
  2128.                     XXXXmmmmSSSSTTTTRRRRIIIINNNNGGGG____CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTT____RRRREEEENNNNDDDDIIIITTTTIIIIOOOONNNN____EEEENNNNDDDD take, for their
  2129.                     argument, the "tag," or name, of a rendition from
  2130.                     the current render table. See the following
  2131.                     section for more information about how to specify
  2132.                     a render table.
  2133.  
  2134.           CCCCOOOOMMMMPPPPOOOOUUUUNNNNDDDD____SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE((((ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn[,...]))))
  2135.                     A compound string table is an array of compound
  2136.                     strings. Objects requiring a list of string
  2137.                     values, such as the XXXXmmmmNNNNiiiitttteeeemmmmssss and
  2138.                     XXXXmmmmNNNNsssseeeelllleeeecccctttteeeeddddIIIItttteeeemmmmssssarguments for the list widget, use
  2139.                     string table values. The _C_O_M_P_O_U_N_D__S_T_R_I_N_G__T_A_B_L_E
  2140.                     function builds the values for these two arguments
  2141.                     of the list widget. The
  2142.                     _C_O_M_P_O_U_N_D__S_T_R_I_N_G__T_A_B_L_Efunction generates a value of
  2143.                     type _s_t_r_i_n_g__t_a_b_l_e.  The name _S_T_R_I_N_G__T_A_B_L_E is a
  2144.                     synonym for _C_O_M_P_O_U_N_D__S_T_R_I_N_G__T_A_B_L_E.
  2145.  
  2146.                     The strings inside the string table must be simple
  2147.                     strings, which the UIL compiler automatically
  2148.                     converts to compound strings.
  2149.  
  2150.           AAAASSSSCCCCIIIIZZZZ____SSSSTTTTRRRRIIIINNNNGGGG____TTTTAAAABBBBLLLLEEEE((((ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn[,...]))))
  2151.                     An ASCIZ string table is an array of ASCIZ (null-
  2152.                     terminated) string values separated by commas.
  2153.                     This function allows you to pass more than one
  2154.                     ASCIZ string as a callback tag value. The
  2155.                     _A_S_C_I_Z__S_T_R_I_N_G__T_A_B_L_E function generates a value of
  2156.                     type aaaasssscccciiiizzzz____ttttaaaabbbblllleeee.  The name _A_S_C_I_Z__T_A_B_L_E is a
  2157.                     synonym for _A_S_C_I_Z__S_T_R_I_N_G__T_A_B_L_E.
  2158.  
  2159.           WWWWIIIIDDDDEEEE____CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR((((ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn))))
  2160.  
  2161.                     Use the _W_I_D_E__C_H_A_R_A_C_T_E_R function to generate a wide
  2162.                     character string from null-terminated string in
  2163.                     the current locale.
  2164.  
  2165.           CCCCLLLLAAAASSSSSSSS____RRRREEEECCCC____NNNNAAAAMMMMEEEE((((ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn))))
  2166.  
  2167.                     Use the _C_L_A_S_S__R_E_C__N_A_M_E function to generate a
  2168.                     widget class name.  For a widget class defined by
  2169.                     the toolkit, the string argument is the name of
  2170.                     the class.  For a user-defined widget, the string
  2171.                     argument is the name of the creation routine for
  2172.  
  2173.  
  2174.  
  2175.      Page 33                                          (printed 4/6/01)
  2176.  
  2177.  
  2178.  
  2179.  
  2180.  
  2181.  
  2182.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  2183.  
  2184.  
  2185.  
  2186.                     the widget.
  2187.  
  2188.           IIIINNNNTTTTEEEEGGGGEEEERRRR____TTTTAAAABBBBLLLLEEEE((((_i_n_t_e_g_e_r__e_x_p_r_e_s_s_i_o_n[,...]))))
  2189.                     An integer table is an array of integer values
  2190.                     separated by commas.  This function allows you to
  2191.                     pass more than one integer per callback tag value.
  2192.                     The _I_N_T_E_G_E_R__T_A_B_L_E function generates a value of
  2193.                     type iiiinnnntttteeeeggggeeeerrrr____ttttaaaabbbblllleeee.
  2194.  
  2195.           AAAARRRRGGGGUUUUMMMMEEEENNNNTTTT((((ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn[, _a_r_g_u_m_e_n_t__t_y_p_e]))))
  2196.  
  2197.                     The _A_R_G_U_M_E_N_T function defines the arguments to a
  2198.                     user-defined widget.  Each of the objects that can
  2199.                     be described by UIL permits a set of arguments,
  2200.                     listed in Appendix B. For example, XXXXmmmmNNNNhhhheeeeiiiigggghhhhttttis an
  2201.                     argument to most objects and has an integer data
  2202.                     type. To specify height for a user-defined widget,
  2203.                     you can use the built-in argument name XXXXmmmmNNNNhhhheeeeiiiigggghhhhtttt,
  2204.                     and specify an integer value when you declare the
  2205.                     user-defined widget.  You do not use the _A_R_G_U_M_E_N_T
  2206.                     function to specify arguments that are built into
  2207.                     the UIL compiler.
  2208.  
  2209.                     The ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn name is the name the UIL
  2210.                     compiler uses for the argument in the UID file.
  2211.                     _a_r_g_u_m_e_n_t__t_y_p_eis the type of value that can be
  2212.                     associated with the argument. If you omit the
  2213.                     second argument, the default type is _A_N_Yand no
  2214.                     value type checking occurs. Use one of the
  2215.                     following keywords to specify the argument type:
  2216.  
  2217.                        +o  ANY
  2218.  
  2219.                        +o  ASCIZ_TABLE
  2220.  
  2221.                        +o  BOOLEAN
  2222.  
  2223.                        +o  COLOR
  2224.  
  2225.                        +o  COMPOUND_STRING
  2226.  
  2227.                        +o  FLOAT
  2228.  
  2229.                        +o  FONT
  2230.  
  2231.                        +o  FONT_TABLE
  2232.  
  2233.                        +o  FONTSET
  2234.  
  2235.                        +o  ICON
  2236.  
  2237.                        +o  INTEGER
  2238.  
  2239.  
  2240.  
  2241.      Page 34                                          (printed 4/6/01)
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  2249.  
  2250.  
  2251.  
  2252.                        +o  INTEGER_TABLE
  2253.  
  2254.                        +o  KEYSYM
  2255.  
  2256.                        +o  PIXMAP
  2257.  
  2258.                        +o  REASON
  2259.  
  2260.                        +o  SINGLE_FLOAT
  2261.  
  2262.                        +o  STRING
  2263.  
  2264.                        +o  STRING_TABLE
  2265.  
  2266.                        +o  TRANSLATION_TABLE
  2267.  
  2268.                        +o  WIDE_CHARACTER
  2269.  
  2270.                        +o  WIDGET
  2271.  
  2272.                     You can use the _A_R_G_U_M_E_N_T function to allow the UIL
  2273.                     compiler to recognize extensions to the Motif
  2274.                     Toolkit. For example, an existing widget may
  2275.                     accept a new argument. Using the _A_R_G_U_M_E_N_T
  2276.                     function, you can make this new argument available
  2277.                     to the UIL compiler before the updated version of
  2278.                     the compiler is released.
  2279.  
  2280.           RRRREEEEAAAASSSSOOOONNNN((((ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn))))
  2281.  
  2282.                     The _R_E_A_S_O_N function is useful for defining new
  2283.                     reasons for user-defined widgets.
  2284.  
  2285.                     Each of the objects in the Motif Toolkit defines a
  2286.                     set of conditions under which it calls a user-
  2287.                     defined function. These conditions are known as
  2288.                     callback reasons.  The user-defined functions are
  2289.                     termed callback procedures. In a UIL module, you
  2290.                     use a callbacks list to specify which user-defined
  2291.                     functions are to be called for which reasons.
  2292.  
  2293.                     Appendix B lists the callback reasons supported by
  2294.                     the Motif Toolkit objects.
  2295.  
  2296.                     When you declare a user-defined widget, you can
  2297.                     define callback reasons for that widget using the
  2298.                     _R_E_A_S_O_N function.  The string expression specifies
  2299.                     the argument name stored in the UID file for the
  2300.                     reason. This reason name is supplied to the widget
  2301.                     creation routine at run time.
  2302.  
  2303.           TTTTRRRRAAAANNNNSSSSLLLLAAAATTTTIIIIOOOONNNN____TTTTAAAABBBBLLLLEEEE((((ssssttttrrrriiiinnnngggg____eeeexxxxpppprrrreeeessssssssiiiioooonnnn[,...]))))
  2304.  
  2305.  
  2306.  
  2307.      Page 35                                          (printed 4/6/01)
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  2315.  
  2316.  
  2317.  
  2318.                     Each of the Motif Toolkit widgets has a
  2319.                     translation table that maps X events (for example,
  2320.                     mouse button 1 being pressed) to a sequence of
  2321.                     actions. Through widget arguments, such as the
  2322.                     common translations argument, you can specify an
  2323.                     alternate set of events or actions for a
  2324.                     particular widget.  The _T_R_A_N_S_L_A_T_I_O_N__T_A_B_L_E function
  2325.                     creates a translation table that can be used as
  2326.                     the value of an argument that is of the data type
  2327.                     ttttrrrraaaannnnssssllllaaaattttiiiioooonnnn____ttttaaaabbbblllleeee.
  2328.  
  2329.                     You can use one of the following translation table
  2330.                     directives with the _T_R_A_N_S_L_A_T_I_O_N__T_A_B_L_E function:
  2331.                     ####oooovvvveeeerrrrrrrriiiiddddeeee, ####aaaauuuuggggmmmmeeeennnntttt, or ####rrrreeeeppppllllaaaacccceeee.  The default is
  2332.                     ####rrrreeeeppppllllaaaacccceeee.  If you specify one of these directives,
  2333.                     it must be the first entry in the translation
  2334.                     table.
  2335.  
  2336.                     The ####oooovvvveeeerrrrrrrriiiiddddeeee directive causes any duplicate
  2337.                     translations to be ignored.  For example, if a
  2338.                     translation for <BBBBttttnnnn1111DDDDoooowwwwnnnn> is already defined in
  2339.                     the current translations for a PushButton, the
  2340.                     translation defined by _n_e_w__t_r_a_n_s_l_a_t_i_o_n_s overrides
  2341.                     the current definition.  If the ####aaaauuuuggggmmmmeeeennnntttt directive
  2342.                     is specified, the current definition takes
  2343.                     precedence.  The ####rrrreeeeppppllllaaaacccceeee directive replaces all
  2344.                     current translations with those specified in the
  2345.                     XXXXmmmmNNNNttttrrrraaaannnnssssllllaaaattttiiiioooonnnnssss resource.
  2346.  
  2347.         RRRReeeennnnddddiiiittttiiiioooonnnnssss aaaannnndddd RRRReeeennnnddddeeeerrrr TTTTaaaabbbblllleeeessss
  2348.           In addition to the string direction, each compound string
  2349.           carries a great deal of information about how its text is to
  2350.           be rendered. Each compound string contains a "tag,"
  2351.           identifying the "rendition" to be used to draw that string.
  2352.           The rendition contains such information as the font, the
  2353.           size, the color, whether the text is to be underlined or
  2354.           crossed out, and the position and style of any tab stops.
  2355.           Many renditions are combined into a "render table," which is
  2356.           specified to any widget with the XXXXmmmmNNNNrrrreeeennnnddddeeeerrrrTTTTaaaabbbblllleeee resource,
  2357.           and in the widget's _c_o_n_t_r_o_l_s list.
  2358.  
  2359.           UIL implements render tables, renditions, tab lists, and tab
  2360.           stops as a special class of objects, in a form similar to
  2361.           the widget class. These objects are not themselves widgets
  2362.           or gadgets, but the format used by UIL to specify widget
  2363.           resources provides a convenient way to specify the qualities
  2364.           and dependencies of these objects.
  2365.  
  2366.           For example, a render table, included in some widget's
  2367.           _c_o_n_t_r_o_l_slist, must also have a _c_o_n_t_r_o_l_s list in its
  2368.           specification, containing the names of its member
  2369.           renditions. Each rendition, in its specification, will
  2370.  
  2371.  
  2372.  
  2373.      Page 36                                          (printed 4/6/01)
  2374.  
  2375.  
  2376.  
  2377.  
  2378.  
  2379.  
  2380.      UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))         UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV         UUUUIIIILLLL((((ffffiiiilllleeee ffffoooorrrrmmmmaaaattttssss))))
  2381.  
  2382.  
  2383.  
  2384.           contain an _a_r_g_u_m_e_n_t_s list specifying such qualities as the
  2385.           font, the color, and whether the text is to be underlined.
  2386.           Any of the renditions may also control a tablist, which will
  2387.           itself control one or more tab stops.
  2388.  
  2389.           Please refer to the _M_o_t_i_f _P_r_o_g_r_a_m_m_e_r'_s _G_u_i_d_e for a complete
  2390.           description of renditions and render tables, and for an
  2391.           example of how to use them in UIL.
  2392.  
  2393.      RRRREEEELLLLAAAATTTTEEEEDDDD IIIINNNNFFFFOOOORRRRMMMMAAAATTTTIIIIOOOONNNN
  2394.           uuuuiiiillll(1), UUUUiiiillll(3)
  2395.  
  2396.  
  2397.  
  2398.  
  2399.  
  2400.  
  2401.  
  2402.  
  2403.  
  2404.  
  2405.  
  2406.  
  2407.  
  2408.  
  2409.  
  2410.  
  2411.  
  2412.  
  2413.  
  2414.  
  2415.  
  2416.  
  2417.  
  2418.  
  2419.  
  2420.  
  2421.  
  2422.  
  2423.  
  2424.  
  2425.  
  2426.  
  2427.  
  2428.  
  2429.  
  2430.  
  2431.  
  2432.  
  2433.  
  2434.  
  2435.  
  2436.  
  2437.  
  2438.  
  2439.      Page 37                                          (printed 4/6/01)
  2440.  
  2441.  
  2442.  
  2443.